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