在Python中,我想搜索文件並輸出包含特定模式的所有行。從具有正則表達式的文件中分組線條
我用:
re.findall('5555',f.read())
到目前爲止,但這只是給了我所有的比賽,這顯然不是我所需要的清單。我需要使用什麼,以便獲得包含該模式的所有行的輸出?即:
blah.blah.5555.com
blah 5555 blah blah
5555 3452 1244
謝謝。
在Python中,我想搜索文件並輸出包含特定模式的所有行。從具有正則表達式的文件中分組線條
我用:
re.findall('5555',f.read())
到目前爲止,但這只是給了我所有的比賽,這顯然不是我所需要的清單。我需要使用什麼,以便獲得包含該模式的所有行的輸出?即:
blah.blah.5555.com
blah 5555 blah blah
5555 3452 1244
謝謝。
簡單:
re.findall('.*5555.*',f.read())
應該做的。或用lazy operator:
re.findall('.*?5555.*',f.read())
(或者,也許更快:
re.findall('(?:[^5]|5(?!555))*5555.*', f.read())
甚至更快,具有possessive quantifier:
re.findall('(?:[^5]|5(?!555))*+5555.*', f.read())
)
我認爲這會工作
lines = []
for line in f.readlines():
match = re.findall('5555', line)
if match:
lines.append(line)
print "".join(lines)
也只有功能性操作
print "".join(filter(lambda x: re.findall('5555',x), f.readlines()))
如果你正在尋找一個固定的字符串(您的例子似乎在暗示你),你可能甚至不需要正則表達式:
>>> with open('file.txt') as f:
... x = [line for line in f if '5555' in line]
...
>>> print x
['blah.blah.5555.com\n', 'blah 5555 blah blah\n', '5555 3452 1244\n']
如果您'在Linux上你可以使用這個命令:'cat filename | grep 5555' – 2013-04-24 13:15:23
@AshwiniChaudhary,符合[無用貓使用獎: - ]](http://partmaps.org/era/unix/award.html#cat) – iruvar 2013-04-24 13:36:08