2013-04-24 2 views
0

В Python я хочу выполнить поиск по файлу и вывести все строки, содержащие определенный шаблон.группировка строк из файла с регулярным выражением

Я использовал:

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

до сих пор, но это только дает мне список всех матчей, которые, очевидно, не то, что мне нужно. Что мне нужно использовать, чтобы я получал вывод всех строк, содержащих шаблон? то есть:

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

спасибо.

+1

Если вы 're on linux вы можете использовать эту команду: 'cat filename | grep 5555' –

+0

@AshwiniChaudhary, который подходит для [бесполезного использования премии кошки: -)] (http://partmaps.org/era/unix/award.html#cat) – iruvar

ответ

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'] 
Смежные вопросы