2015-10-23 3 views
-2

Как я могу получить только NP:Обычного шаблон синтаксического анализа для исключения матча

ROOT -> NP 

Более общие string1 -> string2 Мне нужно извлечь string2

+0

Можете ли вы описать словами то, что вы ожидаете это регулярное выражение, чтобы сделать, в общем случае? –

+0

Чтобы получить 'NP' здесь, вам не нужно регулярное выражение, что-то вроде' s [s.find ("->") + 4:] 'будет делать. Или 's.split (" -> ") [1]'. См. [Demo] (https://ideone.com/gmHncw). –

+0

Я ничего не получаю, я проверяю http://regexpal.com/. – aman

ответ

2

Просто из рисунка после -> в захвате группы.
Также не забыл добавить белое пространство перед вашей схеме:

->\s(\w+) 

Престола демо: https://regex101.com/r/lP0lT3/1


Вы можете использовать re.search захватить первую группу:

print(re.search(r'->\s(\w+)', my_string).group(1)) 
1

\b предназначенный для границей, не для blank. Чтобы сопоставить пробелы, вы должны использовать \s.

Здесь регулярное выражение представляет слово, необязательные пробелы, '->', необязательные пробелы, слово будет: \w+\s*->\s*\w+.

Если вы хотите просто захватить второе слово, и добавить положение о дополнительных исходных пространств, вы можете использовать:

m = re.match('\s*\w+\s*->\s*(\w+)', 'ROOT -> NP') 
print(m.group(1)) 

дает NP

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