2017-01-31 18 views
0

Я пытаюсь использовать Python для извлечения текста между заголовками ниже:Извлечь текст между двумя частями текста

@HEADER1 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
@othertext 

Точный текст @HEADER1 + @othertext может меняться с течением времени. Поэтому мне нужно быть динамичным.

Также, HEADER2 - это слово, которое начинается с '@'. Так есть функция startswith, которую я могу использовать? Или регулярное выражение?

Нечто подобное.

For line in file: 
    if(line == 'HEADER1'): 
     print next line 
     continue = TRUE 
    if(continue == TRUE): 
     print(line) 
    elif(line == othertext): 
     break 
+0

там нет 'HEADER2' в содержание – RomanPerekhrest

+0

' line.startswith ("@") ', что будет найти слово, которое начинается с @ –

+0

не делать' если линия == '@ HEADER1'', do 'if line.startswith (' @ HEADER1 ')'. С первым вариантом вы забываете символ (символы) новой строки. И не используйте 'continue', который является встроенным python. Также 'For' написано в нижнем регистре« f » –

ответ

2

Это делает работу

import re 

string = """@HEADER1 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
@othertext""" 

print '"{}"'.format(re.split(r'(@HEADER1[\n\r]|[\n\r]@othertext)', string)[2]) 

выход:

"ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe" 
+0

делает это, если символы новой строки являются '\ r \ n'? –

+0

Я обновил его в соответствии с '\ r \ n' – Arount

0

без повторного

string = """@HEADER1 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    ExtractMe 
    @othertext""" 

Вы можете играть с str.find внутри строки сращивания. Как так:

print(string[string.find("\n"):string.find("\[email protected]")]) 

Или вы можете превратить строку в списке, найдите элементы, которые вы хотите, и присоединиться к ней вместе, как так ...

list = string.split("\n") 
list = list[1:len(list)-1] 
print("\n".join(list)) 
1

Look что-то вроде этого?

import re 

string = """@HEADER1 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
@othertext 
@HEADER2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
@othertext""" 

for a in re.findall(r'@\w+(?:\r\n|\r|\n)(.*?)@\w+(?:\r\n|\r|\n)?', string, re.DOTALL): 
    print a 

Выход:

не
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 
ExtractMe 

ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2 
ExtractMe2