0

我使用 Python 2.7 和 regex 模块。我使用这个表达式在较长的 DNA 序列中找到一个短序列:

output = regex.findall(r'(?:'+probe+'){s<'+str(int(mismatches)+1)+'}', sequence, regex.BESTMATCH)

参数是:

  • probe : 我在基因组中寻找的一个短字符串
  • 基因组:一长串
  • mismatches :我允许基因组的探针/片段之间有多少差异。

有没有办法获得与基因组中正则表达式匹配的所有序列的位置?此脚本是否找到重叠匹配?它工作得很好,但后来我决定尝试,说:

probe = "TTGACAT" 
genome = "TTGACATTGACATATAAT" 
mismatches = 0

我有 :

['TTGACAT']

参数相同但不匹配 = 10

我有 :

['TTGACAT','GACATAT']

所以我不知道脚本是否只找到一次“TTGACAT”,因为它与第二次出现重叠,或者它是否实际上两次找到“TTGACAT”并且只显示一次结果......

谢谢

4

1 回答 1

1

这是因为它与第二次出现重叠。

如果您想要所有重叠的结果,则必须使用带有重叠标志的相同模式:

output = regex.findall(r'(?:'+probe+'){s<'+str(int(mismatches)+1)+'}', sequence, regex.BESTMATCH, overlapped=True)

如果你想知道序列位置:

for m in regex.finditer(r'(?:'+probe+'){s<'+str(mismatches+1)+'}', sequence, regex.BESTMATCH, overlapped=True):
    print '%d: %s' % (m.start(), m.group())

作为旁白:结果重叠的限制

如果我使用这三个参数:

probe = "ACTG.*ACTG"
sequence = "ACTGTTGACATTGAACTGCATATAATACTG"
mismatches = 0

我只会找到两个结果:['ACTGTTGACATTGAACTGCATATAATACTG', 'ACTGCATATAATACTG']而不是三个。因为两个结果不能在字符串中的相同位置开始。

于 2014-03-01T16:07:11.960 回答