为什么我找不到与python正则表达式匹配的所有模式?

时间:2014-02-26 23:07:07

标签: python regex

这个问题看起来很简单,但我无法弄清楚为什么我没有得到所有的比赛。我正在处理的字符串是“c.1292_1294​​delTTCinsA”。我想使用嵌套组提取四种模式:“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')]

有人可以告诉我我做错了什么吗?除非我遗漏了某些东西,否则这两种模式不会重叠。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您的正则表达式要求该组直接以c\.\d+_\d+开头。字符串的“ins”部分不会直接在此材料之前(前面是“delTTC”)。当您添加额外的+时,您允许一系列此类组,因此它会找到del组,然后找到ins组,但稍后会重复该组“覆盖”之前的组,因此只有最后一组(返回“ins”部分。

你真的需要匹配字符串的开头部分吗?你可以制作你的正则表达式((del|ins)[AGCT]+),它会找到所有四个部分。