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个测试字符串匹配整个字符串,而其他字符串没有任何匹配项。是否可以只使用regex?如果没有,我该如何将它与Python结合?

我试着改变Ωmega对我之前的问题的回答是这样的:^(?=.*Alex)(?=.*Ben)(?=.*Carol)(?=.*David)(?:.*(?:$|s+)){4}$,但结果不太好。

可能的,是的,非常漂亮的,不是。你可以连锁几个前瞻断言,独立检查它们的单词是否在行中,如果没有抛出false,则匹配整行:

^(?=.*bAlexb)(?=.*bBenb)(?=.*bCarolb)(?=.*bDavidb).*$

请参阅regex演示。

更新以满足列出的单词可能出现在以下行中的特定要求:

/
^
# 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.
(?=.*bAlexb)(?=.*bBenb)(?=.*bCarolb)(?=.*bDavidb)
# Now match the line if all assertions were true.
.*
$
/x

请参阅regex演示。

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

您可以尝试一个残酷简单的解决方案,将所有可能性分组到一个选项中:(Alex|Ben|Carol|David)*s*

在这里试试:https://regex101.com/r/MDoAgW/2

不过我不确定你的确切问题是什么。希望这能有所帮助。

最新更新