Python正则表达式:重叠序列位置

时间:2014-03-01 15:55:20

标签: regex python-2.7 dna-sequence

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

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

参数是:

  • 探测:我在基因组中寻找的短链
  • 基因组:长串
  • 不匹配:我允许在基因组的探针/片段之间存在多少差异。

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

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

我得到了:

  

[ 'TTGACAT']

参数相同但不匹配= 10

我得到了:

  

[ 'TTGACAT', 'GACATAT']

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

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']而不是三个。{因为两个结果不能从字符串中的相同位置开始。