我的目标是在文本中找到一个词。需要注意的是,我需要将撇号视为文本。
让我用一个例子来解释。假设我要在文本中查找单词 don
:don't trust don
。我需要匹配 don
而不是 don't
。
我从这个正则表达式开始:r'(?:\b)%s(?:\b)' % re.escape("don")
但是这里它匹配 不要
。然后我尝试了 r'(?:\b|\w\')%s(?:\b|\'\w)' % re.escape("don")
,但无济于事.
如何让我的正则表达式将撇号视为文本?
编辑:我没有提到的一些边缘情况:'don
和 don'
是正确匹配,而 t'don
,don't
和 'don'
不是。
最佳答案
使用否定的前瞻断言:
r'(?:\b)%s(?!\'\w)(?:\b)'
我把它放在 regex101 上了带有演示。
否定先行使表达式匹配 don
只有 如果它后面没有紧跟 '\w
。您的版本无论如何都匹配,因为您在 (?:\b|\'\w)
中的两个选项都匹配。
关于Python 正则表达式 : treat apostrophe as text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266199/