Python中检查两组重复次数相同的正则表达式优化问询
更高效的正则写法来匹配(ab)k(cd)k模式
你的思路方向是对的,但枚举k值确实不够灵活——总不能一直写到k=100吧?其实我们可以利用正则的递归特性(在支持PCRE的环境里,比如PHP、Python、Perl等)来实现一个简洁且能覆盖所有正整数k的写法:
^(ab)(?R)?(cd)$
这个正则怎么工作?
^(ab):匹配字符串开头的一个ab(?R)?:这是递归引用整个正则的语法,?表示这个部分可选。它的作用是允许在第一个ab和最后一个cd之间,插入任意次数的完整正则匹配(也就是再插入ab...cd的结构)(cd)$:匹配字符串结尾的一个cd
这样一来,它就能匹配:
- k=1:
abcd(直接匹配(ab)(cd)) - k=2:
ababcdcd((ab)+ 递归匹配(ab)(cd)+(cd)) - k=3:
abababcdcdcd((ab)+ 两次递归匹配(ab)(cd)+(cd)) - 以此类推,覆盖所有k≥1的情况
验证你的测试用例
- 合法项:
abcd→ 匹配;abababcdcdcd→ 匹配 - 非法项:
ababcd(ab出现2次,cd出现1次)→ 不匹配;abcdcd(ab出现1次,cd出现2次)→ 不匹配
如果你的环境不支持递归正则(比如JavaScript),可以用另一种思路:先匹配所有ab后跟所有cd的基础结构,再用代码补充验证逻辑:
^(ab)+(cd)+$
然后在代码里统计字符串中ab和cd的出现次数是否相等,这也比枚举k值高效得多。
内容的提问来源于stack exchange,提问作者user8108136
相关产品推荐
相关产品推荐

