我的目标是在课文中找到一个单词。警告是我需要把撇号当作文本。
让我举个例子来解释。假设我正在文本中查找单词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'dondon't则不是。

最佳答案

使用否定的前瞻性断言:

r'(?:\b)%s(?!\'\w)(?:\b)'

我已经把这个放在regex101上了。
只有当表达式后面没有紧跟don时,负的lookahead才使其匹配'\w。您的版本仍然匹配,因为(?:\b|\'\w)中的两个选项都匹配。

关于python - Python正则表达式:将撇号视为文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21266199/

10-10 20:12