有没有办法让单个正则表达式满足这个条件??
我在找一个有三个字母的单词,任何顺序, 但必须包含一个I
即
重新匹配foo中的(“[MBDPI]{3}”,foo)和“I”
所以这是正确的结果(在python中使用re模块),但是我可以从一个regex中得到这个结果吗?
>>> for foo in ("MBI", "MIB", "BIM", "BMI", "IBM", "IMB", "MBD"):
... print foo,
... print re.match("[MBDPI]{3}", foo) and "I" in foo
MBI True
MIB True
BIM True
BMI True
IBM True
IMB True
MBD False
有了正则表达式,我知道我可以使用|作为布尔或运算符,但是否有布尔和等价的?
或者我需要一些正向或反向查找?
您可以使用lookahead查看是否存在
I
:您可以通过使用lookaheads来伪造布尔值。根据http://www.regular-expressions.info/lookaround2.html,这将适用于您的案例:
或者你唯一能做的就是:
\b
字符与零宽度字边界匹配。这样可以确保匹配的字符长度正好是三个字符。否则,您将遇到regular language所能做的限制。
另一种选择是匹配:
抓住那群人,然后找一个I
编辑:为了得到完整的答案,我将调整使用Testing The Same Part of a String for More Than One Requirement的Jens' answer:
检查单词边界以确保它只有三个字符长。
这是一个更先进的解决方案,适用于更多的情况,但我通常喜欢什么更容易阅读(作为“或”版本imho)。
相关问题 更多 >
编程相关推荐