2016-11-11 7 views
0

私は、キー(とりわけ)を取り込み、このキーの後の単語をファイルに返す関数を記述しようとしています。以下のコードは動作しますが、キーがファイル内の最初のフレーズである場合に限ります。誰が私が間違っているのかを指摘できますか?re.match内のPython変数

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ループを終了します。最初の行にキーワードがある場合のみ、結果が返されます。

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少し更新 –

関連する問題