2013-10-25 99 views
2

我有一個文本文件,其中要提取一行匹配特定模式的行。我可以使用正則表達式搜索該行並返回它,然後使用它?有沒有更優雅的方式比返回與正則表達式匹配的字符串

for lines in file: 
    if re.match(targetregex,line)!=None: 
     print line 

喜歡的東西:

print re.matchingline(targetregex,file.read()) 
+0

如果沒有匹配,您希望打印什麼? – thefourtheye

+0

我寫錯了嗎?我看看。但是如果有匹配的話,我想返回/打印它。對不起,但我沒看到這個錯誤。幫我。 !=無意味着如果有匹配,它將被打印,對吧? – aldorado

+0

如果你真的想與'None'比較,你應該使用'不是None'而不是'!= None'(儘管在很多情況下,包括這個,你不會有非None的falsy值無論如何,所以請跳過檢查並直接使用表達式的布爾值) – geoffspear

回答

2

您可以使用列表理解,這樣

print [line for line in file if re.match(targetregex, line)] 

這將返回匹配該行列表正則表達式。

+0

好了,現在我明白你的意思了。 != None不需要。 – aldorado

+0

@aldorado是的:) – thefourtheye

+0

但現在告訴我有關條件如何工作(我也可以問這是一個單獨的問題?):re.match(targetregex,行)不返回True。爲什麼如果re.match ...輸入if條件的後果?我認爲它必須是if(condition == True):結果 – aldorado

1

你可以隨時編寫自己的函數來完成這項工作。

def matchingline(regex, file): 
    compiled = re.compile(regex) 
    for line in file: 
     if compiled.match(line): 
      return line 

print(matchingline(targetregex, file)) 
+1

我不知道是否只有第一個是想要的。所以發電機可能是更好的選擇。只是'yield'而不是'return' ... – glglgl

-1

如果你想要一個數組numpy.fromregex看起來夠優雅。

+0

爲什麼要投票? –

相關問題