2017-04-10 5 views
3

ich mit Daten wie folgt eine lange Reihe haben:mehrere Strings zwischen Zeichen

category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA; 

Und ich möchte von ihm erstellen Liste, die wie folgt aussehen:

new_list = [33,54,60] 

Im Grunde nur ich brauche die Werte zwischen category: und ; in einer Zeichenfolge unter Beibehaltung der ursprünglichen Reihenfolge.

Ich könnte etwas erstellen, das funktioniert scheint Ich nehme an, dass es Ausnahmen geben kann, wenn es nicht richtig funktioniert. Ich bin neu bei Python und kenne die Möglichkeiten nicht wirklich, daher würde ich es sehr schätzen, wenn mir jemand zeigen könnte, wie es richtig gemacht werden sollte.

Dies ist die aktuelle Version:

s = "category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;" 
c = s.count("category") 
z = 0 
number_list = [] 
for x in range(z,c): 
    val = s.split('category:')[x+1] 
    number = val.split(' ;')[0] 
    print (number) 
    number_list.append(number.strip()) 

print ("All Values:", number_list) 

Antwort

3

einfach einen regulären Ausdruck konstruieren:

import re 

rgx = re.compile(r'category:\s*(\d+)\s*;') 
number_list = rgx.findall('category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;')

Das gibt:

>>> rgx.findall('category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;') 
['33', '54', '60'] 

Wenn Sie das Ergebnis wollen int s sein, Sie kann ein map:

verwenden
import re 

rgx = re.compile(r'category:\s*(\d+)\s*;') 
number_list = list(map(int,rgx.findall('category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;')))

Dies erzeugt:

>>> number_list 
[33, 54, 60] 
0
s = "category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;" 
s = s.split(";") 
number_list = [] 
for ss in s: 
    if "category" in ss: 
     number_list.append(int(ss[10:-1]))