2014-03-01 79 views
0

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

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

的参数是:

  • 探头:一个简短的字符串我期待在基因组
  • 基因组:长字符串
  • 不匹配:我在基因组的探针/片段之间允许多少差异。

是否有一种方法可以获得与基因组中正则表达式匹配的所有序列的位置?这个脚本是否发现重叠匹配?它工作得很好,但后来我决定尝试一下,说:

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

我:

[ 'TTGACAT']

使用相同的参数,但不匹配= 10

我得到了:

[“TTGACAT”,“GACATAT”]

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

谢谢

+0

你确定你不需要像http://en.wikipedia.org/wiki/Sequence_alignment之类的东西吗? –

+0

嘿。谢谢您的回答。我同意序列比对方法会更有效率。我仍然在学习如何使用BioPython库 - 特别是BLAST功能 - 并需要一个“紧急脚本”。现在使用正则表达式就足够了。无论如何谢谢:) – WhyOhWhy

回答

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

+0

它工作正常,谢谢! int(不匹配)是因为参数是用户通过只返回str()类型的GUI给出的。 – WhyOhWhy

+0

你有没有想过如何找回结果的位置?谢谢 – WhyOhWhy

+0

@ Topop:看看我编辑了我的答案。 –