具有不匹配的不明确的子串

时间:2017-09-22 02:16:54

标签: python regex pypi-regex

我试图使用正则表达式来查找DNA字符串中的子字符串。此子字符串具有不明确的基础,如ATCGR,其中R可以是AG。此外,该脚本必须允许x个不匹配。所以这是我的代码

import regex

s = 'ACTGCTGAGTCGT'    
regex.findall(r"T[AG]T"+'{e<=1}', s, overlapped=True)

因此,如果出现一个不匹配,我预计会有3个子字符串AC**TGC**TGAGTCGTACTGC**TGA**GTCGT以及ACTGCTGAGT**CGT**。预期结果应该是这样的:

['TGC', 'TGA', 'AGT', 'CGT']

但输出是

['TGC', 'TGA']

即使使用re.findall,代码也无法识别最后一个子字符串。 另一方面,如果代码设置为允许与{e <= 2}的2个不匹配,则输出为

['TGC', 'TGA']

是否有另一种获取所有子串的方法?

1 个答案:

答案 0 :(得分:0)

如果我理解得很好,那么您正在寻找与模式T[GA]T匹配的所有三个字母子字符串,并且您最多允许一个错误,但我认为您要查找的错误是只有一个字符替换,因为你从未谈过2个字母的结果。

要获得预期结果,您必须将{e<=1}更改为{s<=1} (或{s<2}并将其应用于整个模式(而不是只有最后一个字母)将它包含在一个组中(捕获或不捕获,如你所愿),否则谓词{s<=1}只链接到最后一个字母:

regex.findall(r'(T[AG]T){s<=1}', s, overlapped=True)