如何用正则表达式检测句子中两个交替单词未按顺序使用
问题分析与解决方案
你的需求本质是:检测句子中是否存在连续出现(中间可隔任意非目标词)的相同目标单词(cat/dog),也就是目标单词序列不是严格交替的cat↔dog模式。
你的原有正则逻辑混乱,既试图匹配交替模式又试图匹配重复模式,导致无法正确识别目标场景。以下是修正后的实现:
修正后的代码
; 正则逻辑:匹配任意位置出现的两个相同目标词,中间不包含另一个目标词 regex := "\b(cat|dog)\b.*?(?!\1)\b(?!cat|dog)\b.*?\b\1\b" string := "The cat chased the cat, and another cat chased, well – another dog." if (string ~= regex "i") { ; i表示大小写不敏感 MsgBox, 需要检测(未按交替顺序使用) } else { MsgBox, 无需检测(符合交替顺序) }
正则逻辑说明
\b(cat|dog)\b:匹配第一个目标单词(cat或dog),并捕获为分组1.*?:匹配中间任意数量的非贪婪字符(包括标点、空格、其他单词)(?!\1)\b(?!cat|dog)\b:确保中间内容里没有出现另一个目标单词(既不是分组1的词,也不是另一个目标词).*?\b\1\b:再次匹配和分组1相同的目标单词
验证场景测试
用你的测试用例验证:
- 需要检测:
"Cat cat."→ 匹配成功 - 无需检测:
"Cat dog."→ 匹配失败 - 需要检测:
"The cat chased another cat."→ 匹配成功 - 无需检测:
"The cat chased another dog."→ 匹配失败 - 需要检测:
"The cat chased the dog after the cat had chased another cat."→ 匹配成功(最后两个cat连续出现) - 无需检测:
"The cat chased the dog after the cat had chased another dog."→ 匹配失败(严格交替) - 需要检测:
"The cat chased the cat, and another cat chased, well – another dog."→ 匹配成功 - 需要检测:
"The cat chased the dog, and another cat chased, well – another dog."→ 匹配成功(最后两个dog连续出现)
内容的提问来源于stack exchange,提问作者LeFunk
相关产品推荐
相关产品推荐

