正则表达式检查字符串是否包含一个集合中的两个或多个单词实例

2024-09-30 18:12:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个正则表达式,以查看给定字符串的集合中是否有2个或更多的单词

如果设置为[猫,狗],则:

“帽子里的猫”-错

“猫和狗”-真的

“猫和猫”-真的

我试过这些,但它们不能正常工作:

\bcat\b|\bdog\b{2,}
(\bcat\b|\bdog\b){2,}

使用正则表达式可以进行此查询吗


Tags: 字符串单词帽子bcatbdog
2条回答

你想要一个简单的真/假匹配结果,还是想要实际捕获匹配的单词

某些正则表达式语言(如PCRE)允许使用(?[Some number])格式的“模式重复”:

(?=(cat|dog).*(?1))

这将查找catdog,然后(由于(?1))再次查找catdogExample 1

如果您希望捕获模式(整个内容或单个单词),可以使用以下选项之一:

((cat|dog).*((?2)))

Example 2

(?:(cat|dog).*((?1)))

Example 3

示例2捕获了\1引用中的整个组,捕获的单词分别位于\2\3

示例3没有捕获整个组,但是它分别捕获了\1\2中的单词

其他语言(Javascript、Python)可能会以不同的方式处理此问题,因此您可能无法访问(?1)引用

选项1:纯正则表达式

(?:.*(?:\b(?:cat|dog)\b)){2}

如果存在匹配项,则表示存在两个或多个单词

如果您想成为一个纯粹主义者,了解一个本身构成布尔断言(不匹配字符)的正则表达式,我们可以将其包装为前瞻:

^(?=(?:.*(?:\b(?:cat|dog)\b)){2})

选项2:计数匹配项

如果您使用的是编程语言,则此伪代码:

WordsRegex = \b(?:cat|dog)\b
MatchCount = count matches(WordsRegex, string)
TwoOrMore = ( MatchCount > 1)

相关问题 更多 >