我希望用某些条件测试字符串匹配
条件:所有密钥必须存在。
RegExp:^(?=.*key1)(?=.*key3)(?=.*key2)
文字:rer key1 werjk key2 and key2 and key3 and end
文字匹配!
现在我的问题是:
答案 0 :(得分:1)
在单个正则表达式中解决这个问题并非易事。好吧,对于您展示的简单示例, 是微不足道的,但它不会扩展,因为您需要自己进行可能的排列。
三分之二(以详细模式编写的“可读性”:
^
(?:
(?=.*key1)(?=.*key2)(?!.*key3)
|
(?=.*key1)(?=.*key3)(?!.*key2)
|
(?=.*key3)(?=.*key2)(?!.*key1)
)
三分之一:
^
(?:
(?=.*key1)(?!.*key2)(?!.*key3)
|
(?=.*key2)(?!.*key1)(?!.*key3)
|
(?=.*key3)(?!.*key2)(?!.*key1)
)
答案 1 :(得分:1)
如果密钥是普通字符串,那么这种情况下不使用正则表达式可能更有效,更清晰。例如在Python中(使用True == 1
和False == 0
)的事实:
def matchExactlyN(text, keys, n):
return sum(key in text for key in keys) == n
>>> text = "rer key1 werjk"
>>> matchExactlyN(text, ["key1","key2","key3"], 1) # 1 of 3
True
>>> matchExactlyN(text, ["key1","key2","key3"], 2) # 2 of 3
False