用于在Python中查找模式的正则表达式

时间:2014-01-16 13:08:28

标签: python regex

我在调整正则表达式公式时遇到了麻烦。

我想找一个模式:

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......................

2 个答案:

答案 0 :(得分:0)

这似乎会对您的测试用例产生正确的结果,但它非常难看。

/^(?:A.{2}H.{3})+(?:(?!A.{2}H.{3}).)+(?:A.{2}H.{3})+$/

http://regex101.com/r/sW5vG2

这是你想要的吗?

效率将与字符串的长度成正比。

编辑:使用PCRE http://regex101.com/r/wX8uK2

改进了解决方案

答案 1 :(得分:0)

我不知道我对你的问题有多了解。

为了解决您的具体问题,您可以使用类似的内容,我想是的。

^(.*)\1((?!\1).)+\1{2}$

检查 DEMO