2016-11-11 3 views
0

Я пытаюсь написать функцию, которая принимает ключ (между прочим) и возвращает слово после этого ключа в файле. Код ниже работает, но только в том случае, если ключ является первой фразой в файле. Может ли кто-нибудь указать, где я ошибаюсь?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

попробовать re.findall. –

+0

... или 're.find', если вам нужно только первое совпадение – spectras

+0

Я пробовал это, но возникли проблемы позже, используя string.group() – user5826447

ответ

3

Вы закончите цикл после первой итерации, поскольку

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

всегда разорвать петлю. Он вернет некоторый результат, только если у вас есть ключевое слово в первой строке. Поэтому я предлагаю следующее:

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" 

и попробовать это:

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

Это тоже. Хороший улов. – spectras

+0

@spectras небольшое обновление –