0

在 Python 中,我想搜索一个文件并输出所有包含特定模式的行。

我用过:

re.findall('5555',f.read())

到目前为止,但这只是给了我所有匹配项的列表,这显然不是我需要的。我需要使用什么才能获得包含该模式的所有行的输出?IE:

blah.blah.5555.com
blah 5555 blah blah
5555 3452 1244

谢谢你。

4

3 回答 3

2

简单地:

re.findall('.*5555.*',f.read())

应该做。或使用惰性运算符

re.findall('.*?5555.*',f.read())

(或者也许更快:

re.findall('(?:[^5]|5(?!555))*5555.*', f.read())

使用所有格量词可能更快:

re.findall('(?:[^5]|5(?!555))*+5555.*', f.read())

)

于 2013-04-24T13:14:39.377 回答
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()))
于 2013-04-24T13:21:11.360 回答
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']
于 2013-04-24T14:10:20.850 回答