2013-11-09 7 views
0

У меня есть текстовый файл, и моя цель - создать выходной файл со всеми словами, которые находятся между двумя конкретными словами.Grep ряд слов из текстового файла python

Например, если у меня есть этот текст:

askdfghj... Hello world my name is Alex and I am 18 years all ...askdfgj. 

И я хочу, чтобы получить все слова между «моим» и «Алекс».

Выход:

my name is Alex 

Я имею в виду ... но я не знаю, как создать диапазон:

if 'my' in open(out).read(): 
     with open('results.txt', 'w') as f: 
      if 'Title' in open(out).read(): 
       f.write('*') 
     break 

Я хочу, чтобы выходной файл с предложением «мой имя - Алекс ».

ответ

2

Вы можете использовать regex здесь:

>>> import re 
>>> s = "askdfghj... Hello world my name is Alex and I am 18 years all ...askdfgj." 
>>> re.search(r'my.*Alex', s).group() 
'my name is Alex' 

Если строка содержит несколько Alex после my и вы хотите только самый короткий матч затем использовать .*?:

С ?:

>>> s = "my name is Alex and you're Alex too." 
>>> re.search(r'my.*?Alex', s).group() 
'my name is Alex' 

Без ?:

>>> re.search(r'my.*Alex', s).group() 
"my name is Alex and you're Alex" 

Код:

with open('infile') as f1, open('outfile', 'w') as f2: 
    data = f1.read() 
    match = re.search(r'my.*Alex', data, re.DOTALL) 
    if match: 
     f2.write(match.group()) 
+0

благодаря это работает слишком! – userbio

0

Вы можете использовать регулярное выражение my.*Alex

data = "askdfghj... Hello world my name is Alex and I am 18 years all ...askdfgj" 
import re 
print re.search("my.*Alex", data).group() 

Выход

my name is Alex 
+0

спасибо, что он работает! – userbio

+0

@userbio Добро пожаловать :) – thefourtheye

Смежные вопросы