0

我希望在某些条件下测试字符串匹配

条件:所有键都必须存在。

正则表达式:^(?=.*key1)(?=.*key3)(?=.*key2)

文本:rer key1 werjk key2 and key2 and key3 and end

文字匹配!

现在我的问题:

  • 如何测试字符串以匹配三个键中的任意两个键?
  • 如何测试字符串以匹配三个键中的任何一个?
4

2 回答 2

1

在单个正则表达式中解决这个问题并非易事。好吧,对于您展示的简单示例来说,这 微不足道的,但它不会扩展,因为您需要自己进行可能的排列。

三分之二(以“可读性”的详细模式编写:

^
(?:
 (?=.*key1)(?=.*key2)(?!.*key3)
 |
 (?=.*key1)(?=.*key3)(?!.*key2)
 |
 (?=.*key3)(?=.*key2)(?!.*key1)
)

三选一:

^
(?:
 (?=.*key1)(?!.*key2)(?!.*key3)
 |
 (?=.*key2)(?!.*key1)(?!.*key3)
 |
 (?=.*key3)(?!.*key2)(?!.*key1)
)
于 2012-04-11T10:30:38.017 回答
1

如果键是纯字符串,那么在这种情况下,不使用正则表达式可能更有效、更清晰。True == 1例如在 Python 中(使用and的事实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
于 2012-04-11T10:42:41.517 回答