1

我正在尝试使用正则表达式在一串 DNA 中查找子串。这个子字符串有模棱两可的基数,比如ATCGR,哪里R可能是AG。此外,脚本必须允许x不匹配的数量。所以这是我的代码

import regex

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

因此,如果有一个不匹配,我会期望 3 个子字符串AC**TGC**TGAGTCGTandACTGC**TGA**GTCGTACTGCTGAGT**CGT**。预期的结果应该是这样的:

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

但输出是

['TGC', 'TGA']

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

['TGC', 'TGA']

还有另一种方法来获取所有子字符串吗?

4

1 回答 1

0

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

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

regex.findall(r'(T[AG]T){s<=1}', s, overlapped=True)
于 2017-09-22T08:28:39.730 回答