我想在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
不过我不确定你的确切问题是什么。希望这能有所帮助。