2017-02-13 4 views
1

Я хотел бы получить строки из текста, где строки находятся между двумя заданными другими строками, - но обе эти две последние строки частично определяются выражениями регулярных выражений также.Python Regex: поиск выражения между двумя выражениями (также regex-ed)

Таким образом, из следующих строк:

ALPHA101BETAsomething1GAMMA532DELTA 
ALPHA231BETAsomething2GAMMA555DELTA 
ALPHA341BETAagainsomethingsomethingGAMMA998DELTA 

Я хотел бы получить следующее:

something1 
something2 
againsomething 

Моя проблема в том, что я не могу определить открытия и закрытия выражений, так что эти что-то плюс трехзначные выражения плюс снова что-то снова.

До сих пор я пытался, но не смог с этим:

re.findall("ALPHA(?:\d\.){3}BETA(.*?)GAMMA(?:\d\.){3}DELTA", pagetext) 

Как я мог бы поручить анализатор, что данный матч регулярного выражения группа не является желаемым результатом, но часть открытия/закрытия строки?

+0

Является ли их какой-либо линии Seperator? –

+1

Что вы ожидаете от совпадения с '(?: \ D \.) {3}'? Есть ли буквальные точки в ваших входных строках? Возможно, все, что вам нужно, это ['(? S) ALPHA \ d {3} BETA (. *?) GAMMA \ d {3} DELTA'] (https://regex101.com/r/XUaVfi/1)? См. Также [демонстрация Python] (https://ideone.com/ecZPuA). –

ответ

0

Я немного изменил регулярное выражение, и теперь он работает для меня. Вы можете использовать re.compile, re.search и re.group, чтобы получить конкретную подстроку Вы искали:

import re 
REGEX = re.compile(r'ALPHA(\d){3}BETA(.*?)GAMMA(\d){3}DELTA') 
# The next part is all about how your pagetext is formatted. 
# if you have newlines in the pagetext: 
for line in pagetext.split('\n'): 
    result = re.search(REGEX, line) 
    your_desired_str = result.group(2) 

# if you just want to read the text line by line from a file: 
with open(yourfile) as infile: 
    for line in infile: 
     result = re.search(REGEX, line) 
     your_desired_str = result.group(2) 
0

Это будет работать для вас: -

import re 
text ='ALPHA101BETAsomething1GAMMA532DELTA\nALPHA231BETAsomething2GAMMA555DELTA\nALPHA341BETAagainsomethingsomethingGAMMA998DELTA' 


for line in text.split('\n'): 

    print re.findall(r'ALPHA+\d+BETA(.*?)GAMMA+\d+DELTA',line)[0] 
+0

Это работает для вас? –

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