2016-06-03 2 views
1

Скажем у меня есть эта строкаИзвлечение строк внутри строк с помощью Regex Python

«Input: Можно ли заказать отель в Лагосе Разбираем: книга VB ROOT + - Может MD AUX + - мы PRP nsubj + - отель NN dobj | + - йе DT | + - в IN приготовительного |?. + - Лагос ННП PObj + - пунктуатор "

и я хочу, чтобы получить список, как этот

['book VB ROOT', 'Can MD aux',..., '? . punct'] 

используя правильный выражение.

Я попытался сделать

result = re.findall('\||\+-- (.*?)\+--|\| ', result, re.DOTALL) 

любая помощь будет оценена

+0

Вы действительно должны использовать регулярное выражение? Вы можете добиться того, чего хотите, с простым 'split()' –

ответ

1

без регулярных выражений, играя со встроенными функциями и методами:

>>> filter(bool, map(str.strip, s.replace('+--', '|').split('Parse:')[1].split('|'))) 
['book VB ROOT', 'Can MD aux', 'we PRP nsubj', 'hotel NN dobj', 'an DT det', 'in IN prep', 'Lagos NNP pobj', '? . punct'] 
+1

спасибо, это сработало! –

0

Я хотел бы использовать re.split ..

>>> s = 'Can we book an hotel in Lagos ? Parse: book VB ROOT +-- Can MD aux +-- we PRP nsubj +-- hotel NN dobj | +-- an DT det | +-- in IN prep |  +-- Lagos NNP pobj +-- ? . punct' 
>>> re.split(r'\s*\|?\s*\+\s*--\s*', s.split('Parse:')[1].strip()) 
['book VB ROOT', 'Can MD aux', 'we PRP nsubj', 'hotel NN dobj', 'an DT det', 'in IN prep', 'Lagos NNP pobj', '? . punct'] 
+0

, не работающим, это результат ['Можем ли мы забронировать отель в Лагосе? Parse '] примечание: строка «Вход: Мы можем забронировать отель в Лагосе?» Парс: книга VB ROOT + - Can MD aux + - мы PRP nsubj + - отель NN dobj | + - DT det | + - in IN prep | + - Lagos NNP pobj + -?. punct « –

+0

проверить мое обновление .. Я думал, что« Input »не является частью строки ввода. –

0

Вот версия, которая делает использование регулярных выражений, но не требует цикла по всем частям дважды:

def extract(line): 
    _, _, parts = line.strip().partition(' Parse: ') 
    return re.split('(?: \|)? \+-- ', parts) 

line = "Input:Can we book an hotel in Lagos ? Parse: book VB ROOT +-- Can MD aux +-- we PRP nsubj +-- hotel NN dobj | +-- an DT det | +-- in IN prep | +-- Lagos NNP pobj +-- ? . punct " 
print(extract(line)) 
>>> ['book VB ROOT', 'Can MD aux', 'we PRP nsubj', 'hotel NN dobj', 'an DT det', 'in IN prep', 'Lagos NNP pobj', '? . punct'] 
Смежные вопросы