不匹配的模糊子串

Ambiguous substring with mismatches

我正在尝试使用正则表达式在 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,代码也无法识别最后一个子字符串。 另一方面,如果代码设置为允许 2 个与 {e<=2} 不匹配,则输出为

['TGC', 'TGA']

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

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

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

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