我使用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'两次并且只显示一次结果......
由于
答案 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']
而不是三个。{因为两个结果不能从字符串中的相同位置开始。