【问题标题】:Why can't I find all pattern matches with python regex?为什么我找不到所有与 python 正则表达式匹配的模式?
【发布时间】:2014-02-26 23:07:06
【问题描述】:

这个问题看起来很简单,但我不明白为什么我没有得到所有匹配项。我正在处理的字符串是“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')]

谁能告诉我我做错了什么?除非我遗漏了什么,否则这两种模式不会重叠。

提前致谢!

【问题讨论】:

    标签: python regex


    【解决方案1】:

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

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

    【讨论】:

    • 啊,当然。我知道这很愚蠢。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多