Ich bin ein Anfänger zu Python regexes. Ich habe erreicht, was ich brauchte, aber es ist wirklich hässlich, da mir die Erfahrung fehlt. Mein Ziel ist es, ein Array von Zeichenfolgen der Form zu konvertieren:Python Regex String-Array zu Float-Array
notes = ["10.0% higher", "5.0% lower", "Same as", "21.2% lower"]
zu einer Reihe von Schwimmern, so dass die oben genannten Array ergibt:
changes = [10.0,-5.0,0,-21.2]
Der folgende Code wird erreicht, dass aber wirklich wiederholend und schlechter Stil. Wie kann ich das optimieren?
changes = []
for note in notes:
m = re.search(r"(?:(\d+\.\d+\%\shigher)|(\d+\.\d+\%\slower)|(Same\sas))", note)
if m:
if m.groups(0):
if m.groups(0)[0]:
changes += [float(re.match(r"(\d+\.\d+)", m.groups(0)[0]).groups(0)[0])]
elif m.groups(0)[1]:
changes += [-float(re.match(r"(\d+\.\d+)", m.groups(0)[1]).groups(0)[0])]
else:
changes += [0.0]
print changes
Sie sollten dies wirklich auf CodeReview.SE schreiben ... Sie könnten diese 2 if-Anweisungen auch ändern, wenn m: if m.groups (0): ', auf eins, wenn m und m.groups (0): ' – Druzion