danke schonmal für die antworten... das mit dem compile stimmt natürlich
soweit ich gelesen hab gibt findall eine liste von strings zurück auf die der reguläre ausdruck passt, die kann ich doch dann einfach 'matches' nennen und drüber iterieren und mir die strings ausgeben lassen...
es sollen ausdrücke der form "2 GB", "2 GByte" und alles mögliche sonst gefiltert werden, was in der hinsicht denkbar ist
die [^0-9] muss vor die 2, weil ich "32 GB" nicht als "2 GB" filtern will, die angabe steht nie am zeilenanfang von daher ist es egal...
was also nun nicht funktioniert, ist:
Code: Alles auswählen
file = open("bla")
pattern = re.compile(r'(?<![0-9])2\s*g(yte)?\s*b(yte)?', re.IGNORECASE)
for line in file:
matches = re.findall(pattern, line)
for match in matches:
print match
bei einer zeile in der "2GB" vorkommt, krieg ich als Ausgabe ('', ''), wobei '' der leere string bedeutet...
was hingegen funktioniert ist
Code: Alles auswählen
file = open("bla")
pattern = re.compile(r'(?<![0-9])2\s*g\s*b', re.IGNORECASE)
for line in file:
matches = re.findall(pattern, line)
for match in matches:
print match
bei einer zeile in der "2GB" vorkommt, krieg ich als Ausgabe "2GB" so wie es sein soll... da ich im zweiten fall nur die (...)? ausdrücke weggelassen hab, muss es scheinbar daran liegen... meine frage ist warum