如何遍历字符串中所有重叠的匹配项?

时间:2019-07-06 14:29:49

标签: python regex

我想遍历句子/字符串中所有重叠的术语匹配项。如果仅用一个正则表达式无法解决问题,则可以使用多个正则表达式,但是表达式的数量应与术语的数量无关。

>>> 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')]

我仍然无法提取“影响效应”一词-我认为我坚持使用“背后的断言”。谢谢!

编辑#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')]

0 个答案:

没有答案
相关问题