python - 用于匹配 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))
解决方案
如果您在将单词列表转换为正则表达式之前按长度对其进行排序,则较长的单词(如“what's”)将位于较短的单词(如“what”)之前。这应该可以解决问题。
regex_all = re.compile('|'.join(sorted(vocabWords, key=len, reverse=True)))
推荐阅读
- c - 只要它们包含“下一个”字段,是否可以在 C 中为不同的列表结构编写通用遍历函数?
- python - 我的 Discord 机器人不断出现错误,无法弄清楚如何修复它
- python - 将列值转换为 pyspark 数据框中的列
- android - gradle build:任务':app:validateSigningAutomationRelease'执行失败
- amazon-web-services - 如何使用 AWS CLI 使用 EC2 标签或名称删除 EC2 实例
- html - 使用jsp和java无法同时将多个文件上传到mysql数据库
- c# - 无法在对讲机中创建公司
- google-apps-script - 我无法从任何文件夹访问 createFile 方法。我想从 URL 将图像文件保存在 gdrive 中
- reactjs - 如何故意将 Web 服务器配置为返回 500
- node.js - renderer() 组件中的状态未更新