我在调整正则表达式公式时遇到了麻烦。
我想找一个模式:
AxxHxxxAxxHxxxbbbbbAxxHxxxAxxHxxx
但不是:
AxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxxAxxHxxx
如果我使用:
"(A\w{2}H\w{3}){2,4}.+(A\w{2}H\w{3}){2,4}"
它会找到两者。我试过通过以下方法排除长长的AxxHxxx重复:
"(?!(A\w{2}H\w{3}){8})(A\w{2}H\w{3}){2,4}.+(A\w{2}H\w{3}){2,4}"
但它实际上不起作用。你们有没有任何想法如何解决这个问题?由于我将在大数据集上运行,我希望最好避免使用拼接字符串等循环地狱。
提前致谢!
编辑:
由于对另一组例子感兴趣,我将尝试更详细地解释我想要完成的事情。
我想在一个字符串中找到一个片段,它包含两个重复片段和一组中间的任何字符,例如:
.......A..H...A..H...A..H...............A..H...A..H...A..H.......................
其中“。”是任何角色,你有两个“A..H ......”的重复模块。唯一的问题是我不想找到继续延长的重复次数,例如:
.......A..H...A..H...A..H...A..H...A..H...A..H......................
答案 0 :(得分:0)
这似乎会对您的测试用例产生正确的结果,但它非常难看。
/^(?:A.{2}H.{3})+(?:(?!A.{2}H.{3}).)+(?:A.{2}H.{3})+$/
这是你想要的吗?
效率将与字符串的长度成正比。
编辑:使用PCRE http://regex101.com/r/wX8uK2
改进了解决方案答案 1 :(得分:0)