首页 > 解决方案 > 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}$但效果并不好。

标签: pythonregex

解决方案


可能,是的,非常漂亮,不是。您可以链接几个先行断言,这些断言独立检查它们的单词是否在行中,如果它们都没有抛出错误,则匹配整行:

^(?=.*\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

请参阅正则表达式演示

拆分行然后通过字符串函数或字典进行比较可能是更高效的方法。


推荐阅读