Как перебрать все совпадающие совпадения в строке? - PullRequest
0 голосов
/ 06 июля 2019

Я хочу перебрать все совпадающие совпадения терминов в предложении / строке.Если решить проблему с помощью одного регулярного выражения невозможно, то можно использовать более одного выражения, но число выражений не должно зависеть от количества терминов.

>>> 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')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...