我正在尝试编写一个正则表达式,以查看给定字符串中集合中是否有2个或更多单词。
如果该集合是[cat,dog]则:
“戴着帽子的猫” - 假
“猫与狗” - 真实
“猫与猫” - 真的
我尝试了这些,但它们无法正常工作:
\bcat\b|\bdog\b{2,}
(\bcat\b|\bdog\b){2,}
这个查询是否可以使用正则表达式?
答案 0 :(得分:1)
选项1:Pure Regex
(?:.*(?:\b(?:cat|dog)\b)){2}
如果匹配,则True
表示存在两个或更多单词。
如果你想成为一个关于正则表达式的纯粹主义者,它本身构成一个布尔断言(没有字符匹配),我们可以将它包装在一个预测中:
^(?=(?:.*(?:\b(?:cat|dog)\b)){2})
选项2:计算匹配
如果您使用的是编程语言,则此伪代码:
WordsRegex = \b(?:cat|dog)\b
MatchCount = count matches(WordsRegex, string)
TwoOrMore = ( MatchCount > 1)
答案 1 :(得分:0)
您想要匹配的简单真/假结果,还是想要实际捕获匹配的单词?
某些正则表达式语言(如PCRE)允许"模式重复"使用(?[某些数字])格式:
(?=(cat|dog).*(?1))
这会查找cat
或dog
,然后(由于(?1)
)会再次查找cat
或dog
。 Example 1
如果你想捕捉模式(整个事物或单个词),你可以使用以下之一:
((cat|dog).*((?2)))
或
(?:(cat|dog).*((?1)))
示例2捕获\1
引用中的整个组,分别在\2
和\3
中捕获了单词。
示例3没有捕获整个组,但它分别捕获\1
和\2
中的单词。
其他语言(Javascript,Python)可能会有不同的处理方式,因此您可能无法访问(?1)
引用。