2016-11-11 57 views
0

我正在嘗試編寫一個函數,該函數接受一個鍵(以及其他內容)並返回文件中此鍵後的單詞。下面的代碼可以工作,但前提是密鑰恰好是文件中的第一個短語。任何人都可以指出我要出錯的地方嗎?重新匹配的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 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小更新 –