我一直想做的是制作一个看起来像这样的图案: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']
所以看起来模式是正确的,但由于某种原因,它不能打印出所有的模式?
答案 0 :(得分:1)
它只返回第一个字母,因为只有这部分属于一个组。你必须将整个正则表达式放在一个组中。但在第一个字母出现在第二组后,您必须将\1
更改为\2
。
试试:
(([A-Z])[A-Z]{2}[a-z]\2[A-Z]{2})