我的目标是在课文中找到一个单词。警告是我需要把撇号当作文本。
让我举个例子来解释。假设我正在文本中查找单词don
。我需要匹配don't trust don
而不是don
。
我从这个正则表达式开始:don't
但是这里它匹配两个r'(?:\b)%s(?:\b)' % re.escape("don")
的出现。然后我尝试了don
,但没有成功。
如何使正则表达式将撇号视为文本?
编辑:我没有提到的一些边缘案例:r'(?:\b|\w\')%s(?:\b|\'\w)' % re.escape("don")
和'don
是正确的匹配,而don'
、t'don
和don't
则不是。
最佳答案
使用否定的前瞻性断言:
r'(?:\b)%s(?!\'\w)(?:\b)'
我已经把这个放在regex101上了。
只有当表达式后面没有紧跟
don
时,负的lookahead才使其匹配'\w
。您的版本仍然匹配,因为(?:\b|\'\w)
中的两个选项都匹配。关于python - Python正则表达式:将撇号视为文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21266199/