我试图使用正则表达式来查找DNA字符串中的子字符串。此子字符串具有不明确的基础,如ATCGR
,其中R
可以是A
或G
。此外,该脚本必须允许x
个不匹配。所以这是我的代码
import regex
s = 'ACTGCTGAGTCGT'
regex.findall(r"T[AG]T"+'{e<=1}', s, overlapped=True)
因此,如果出现一个不匹配,我预计会有3个子字符串AC**TGC**TGAGTCGT
和ACTGC**TGA**GTCGT
以及ACTGCTGAGT**CGT**
。预期结果应该是这样的:
['TGC', 'TGA', 'AGT', 'CGT']
但输出是
['TGC', 'TGA']
即使使用re.findall,代码也无法识别最后一个子字符串。 另一方面,如果代码设置为允许与{e <= 2}的2个不匹配,则输出为
['TGC', 'TGA']
是否有另一种获取所有子串的方法?
答案 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)