首页 > 解决方案 > 用于匹配 Python 中包含撇号的确切单词的正则表达式?

问题描述

出于这个项目的目的,我使用了更精确的正则表达式,而不是更通用的。我正在计算一个文本文件中的单词列表中出现的单词,我导入到我的脚本 vocabWords 中,其中列表中的每个单词都是 format \bword\b

当我运行我的脚本时,\bwhat\b会拿起单词“what”和“what's”,但\bwhat's\b不会拿起任何单词。如果我切换顺序,使撇号单词在根单词之前,则单词计数正确。如何更改我的正则表达式列表以便正确计算单词?我了解问题在于使用“\b”,但我无法找到解决此问题的方法。我不能有更通用的正则表达式,我必须将单词本身包含在正则表达式模式中。

词组:

\bwhat\b
\bwhat's\b
\biron\b
\biron's\b

我的代码:

matched = []
regex_all = re.compile('|'.join(vocabWords))
for row in df['test']:
    matched.append(re.findall(regex_all, row))

标签: pythonregexcount

解决方案


如果您在将单词列表转换为正则表达式之前按长度对其进行排序,则较长的单词(如“what's”)将位于较短的单词(如“what”)之前。这应该可以解决问题。

regex_all = re.compile('|'.join(sorted(vocabWords, key=len, reverse=True)))

推荐阅读