在Python中,我想搜索文件并输出包含特定模式的所有行。
我用过:
re.findall('5555',f.read())
到目前为止,但这只是给了我一份所有比赛的清单,这显然不是我需要的。我需要使用什么才能获得包含该模式的所有行的输出?即:
blah.blah.5555.com
blah 5555 blah blah
5555 3452 1244
谢谢。
答案 0 :(得分:2)
简单地:
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())
)
答案 1 :(得分:1)
我认为这会起作用
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()))
答案 2 :(得分:0)
如果您正在搜索固定字符串(您的示例似乎暗示您是),您可能甚至不需要正则表达式:
>>> 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']