正则表达式findall只输出模式的第一个字符

时间:2014-08-08 09:16:13

标签: regex

我一直想做的是制作一个看起来像这样的图案:XXXxXXX,其中所有的x都是任意字母,但是大x的第1和第4个是相同的。我还想在我的字符串中找到这种模式的所有情况。

所以这就是我写的代码(我编写的字符串只是为了测试模式):

import re   

ring = "ABCaADEABCaADEABCaADEABCaADE"
regex = re.compile(r'([A-Z])[A-Z]{2}[a-z]\1[A-Z]{2}')

print regex.findall(ring)

这是我得到的输出:

['A', 'A', 'A', 'A']

然后我尝试更改字符串,因此第1和第4个大字母在字符串中第4个重复的模式中不匹配,这就是我得到的:

['A', 'A', 'A']

所以看起来模式是正确的,但由于某种原因,它不能打印出所有的模式?

1 个答案:

答案 0 :(得分:1)

它只返回第一个字母,因为只有这部分属于一个组。你必须将整个正则表达式放在一个组中。但在第一个字母出现在第二组后,您必须将\1更改为\2

试试:

(([A-Z])[A-Z]{2}[a-z]\2[A-Z]{2})

demo