2013-04-24 64 views
0

在Python中,我想搜索文件并输出包含特定模式的所有行。从具有正则表达式的文件中分组线条

我用:

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

到目前为止,但这只是给了我所有的比赛,这显然不是我所需要的清单。我需要使用什么,以便获得包含该模式的所有行的输出?即:

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

谢谢。

+1

如果您'在Linux上你可以使用这个命令:'cat filename | grep 5555' – 2013-04-24 13:15:23

+0

@AshwiniChaudhary,符合[无用猫使用奖: - ]](http://partmaps.org/era/unix/award.html#cat) – iruvar 2013-04-24 13:36:08

回答

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

我认为这会工作

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())) 
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']