2016-11-11 2 views
0

Ich versuche, eine Funktion zu schreiben, die unter anderem einen Schlüssel aufnimmt und das Wort nach diesem Schlüssel in der Datei zurückgibt. Der folgende Code funktioniert, aber nur, wenn der Schlüssel der erste Satz in der Datei ist. Kann jemand darauf hinweisen, wo ich falsch liege?Python-Variable in re.match

def findmatch(key, split_by, tempsl, filename, temp): 
    rx=r''+key+'(.*)' 
    f = open(tempsl + filename, 'r', encoding='windows-1252') 
    for eachline in f: 
     string=re.match(rx, eachline) 
     if string: 
      return (string.group().split(' ')[split_by]) 
     else: 
      return "didn't work" 
+0

try re.findall. –

+0

... oder 're.find', wenn Sie nur die erste Übereinstimmung benötigen – spectras

+0

Ich habe das versucht, hatte aber später Probleme mit string.group() – user5826447

Antwort

3

Sie beenden Ihre for-Schleife nach der ersten Iteration, weil

if string: 
    return (string.group().split(' ')[split_by]) 
else: 
    return "didn't work" 

immer die Schleife brechen. Es wird nur dann ein Ergebnis zurückgeben, wenn Sie ein Schlüsselwort in der ersten Zeile haben. Deshalb schlage ich vor das:

for eachline in f: 
    string=re.match(rx, eachline) 
    if string: 
     return (string.group().split(' ')[split_by]) 
else: # else statemant is a part of for loop (moved to the left) 
    return "didn't work" 

und versuchen Sie dies:

m = re.search('(?<=' + key + ')\w+', eachline) 
m.group(0) 
+0

Das auch. Guter Fang. – spectras

+0

@spectras kleines Update –

Verwandte Themen