Я хочу перебрать все совпадающие совпадения терминов в предложении / строке.Если решить проблему с помощью одного регулярного выражения невозможно, то можно использовать более одного выражения, но число выражений не должно зависеть от количества терминов.
>>> import re
>>> text = 'X has effect on Y.'
>>> terms = ['has effect', 'effect', 'effect on']
>>> pattern = r"(?=\b(" + "|".join(re.escape(term) for term in terms) + r")\b)"
>>> print pattern
(?=\b(has\ effect|effect|effect\ on)\b)
>>> [(m.span(1), text[m.start(1):m.end(1)]) for m in re.finditer(pattern, text)]
[((2, 12), 'has effect'), ((6, 12), 'effect')]
IЯ до сих пор не могу извлечь «эффект» из термина - я думаю, что застрял с «утверждением позади».Спасибо!
РЕДАКТИРОВАТЬ # 1:
Описание проблемы в терминах спецификаций ввода / вывода с примером:
Ввод:
- предложение,например,
'X has effect on Y.'
- список терминов, например
['has effect', 'effect', 'effect on']
Вывод:
- список упоминаний (
((start, end), term)
кортежи),например, [((2, 12), 'has effect'), ((6, 12), 'effect'), ((6, 15), 'effect on')]