python - Python RegEx 寻找给定单词的组合(而不是排列):有可能吗?
问题描述
我想在 Python 中有一个正则表达式,它完全匹配一组由任意数量的空格分隔的单词:Alex、Ben、Carol、David 。给定这些示例(每一行都是一个单独的测试字符串):
Alex Ben Carol David
David Alex Carol Ben
Carol David Ben Alex
Alex Ben Carlos Dave
Anthony Ben Carol Dave
Alex Carol David
Ben
前 3 个测试字符串匹配整个字符串,而其他的没有任何匹配项。是否可以只使用正则表达式?如果没有,我如何将它与 Python 结合起来?
我尝试像这样更改 Ωmega 对我之前的问题的回答:^(?=.*Alex)(?=.*Ben)(?=.*Carol)(?=.*David)(?:.*(?:$|\s+)){4}$
但效果并不好。
解决方案
可能,是的,非常漂亮,不是。您可以链接几个先行断言,这些断言独立检查它们的单词是否在行中,如果它们都没有抛出错误,则匹配整行:
^(?=.*\bAlex\b)(?=.*\bBen\b)(?=.*\bCarol\b)(?=.*\bDavid\b).*$
请参阅正则表达式演示。
更新以满足特定要求,即仅列出的单词可能出现在行中:
/
^
# Make sure the line only consists of targeted words.
(?=
# First word.
(?:Alex|Ben|Carol|David)
# Three more words until the end of line.
(?:[ \t]+(?:Alex|Ben|Carol|David)){3}$
)
# Make sure all four required words are present.
(?=.*\bAlex\b)(?=.*\bBen\b)(?=.*\bCarol\b)(?=.*\bDavid\b)
# Now match the line if all assertions were true.
.*
$
/x
请参阅正则表达式演示。
拆分行然后通过字符串函数或字典进行比较可能是更高效的方法。
推荐阅读
- python - Django-有些图像有时会丢失,你能帮我吗
- c++ - 为什么在 C++ 中使用 Boost 库时出现错误?
- python - 有没有办法让 pydoc 为一个模块及其子模块生成文档?
- jquery - 如何让 JQuery 函数适用于 ejs 呈现的每个连续页面,以便使用 Node.js 从 mongodb 检索数据?
- c++ - 如何正确显示 CPU 上处理的噪声
- java - 从其他类调用方法时出现循环/空错误
- android - 在创建 Stripe 客户时,在 Android 中使用与在 iOS 中相同的云功能
- typescript - 映射对象属性名称的通用函数
- reactjs - 使用 npx create-react-app 在 ReactJs 中创建应用程序不起作用
- python - python influxdb重用客户端并检测连接丢失