不匹配的模糊子串
Ambiguous substring with mismatches
我正在尝试使用正则表达式在 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,代码也无法识别最后一个子字符串。
另一方面,如果代码设置为允许 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)
我正在尝试使用正则表达式在 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,代码也无法识别最后一个子字符串。 另一方面,如果代码设置为允许 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)