这个问题看起来很简单,但我无法弄清楚为什么我没有得到所有的比赛。我正在处理的字符串是“c.1292_1294delTTCinsA”。我想使用嵌套组提取四种模式:“del”,“delTTC”,“ins”和“insA”。我尝试过re.match,re.findall和re.finditer但没有成功。这是我的代码:
>>> s = 'c.1292_1294delTTCinsA'
>>> m = re.findall(r'c\.\d+_\d+((del|ins)[AGCT]+)', s)
>>> m
[('delTTC', 'del')]
如果我在末尾添加'+'运算符,我会得到另外两个预期匹配:
>>> m = re.findall(r'c\.\d+_\d+((del|ins)[AGCT]+)+', s)
>>> m
[('insA', 'ins')]
有人可以告诉我我做错了什么吗?除非我遗漏了某些东西,否则这两种模式不会重叠。
提前致谢!
答案 0 :(得分:2)
您的正则表达式要求该组直接以c\.\d+_\d+
开头。字符串的“ins”部分不会直接在此材料之前(前面是“delTTC”)。当您添加额外的+
时,您允许一系列此类组,因此它会找到del组,然后找到ins组,但稍后会重复该组“覆盖”之前的组,因此只有最后一组(返回“ins”部分。
你真的需要匹配字符串的开头部分吗?你可以制作你的正则表达式((del|ins)[AGCT]+)
,它会找到所有四个部分。