【问题标题】:Python regex : overlapping sequences positionPython正则表达式:重叠序列位置
【发布时间】:2014-03-01 15:55:20
【问题描述】:

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

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

参数为:

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

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

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

我明白了:

['TTGACAT']

参数相同但不匹配 = 10

我明白了:

['TTGACAT','GACATAT']

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

谢谢

【问题讨论】:

  • 您确定不需要en.wikipedia.org/wiki/Sequence_alignment 之类的东西吗?
  • 嘿。谢谢您的回答。我同意序列比对方法会更有效。我仍在学习如何使用 BioPython 库——尤其是 BLAST 功能——并且需要一个“紧急脚本”。现在使用正则表达式就足够了。无论如何谢谢:)

标签: regex python-2.7 dna-sequence


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

【讨论】:

  • 它工作正常,谢谢! int(mismatches) 是因为参数是用户通过 GUI 给出的,只返回 str() 类型。
  • 您对我如何检索结果的位置有任何想法吗?谢谢
  • Np。它适用于我计划使用此代码 sn-p 的目的。我一周前才开始使用正则表达式,所以我也找不到将不匹配的东西与 finditer 结合起来的方法。谢谢你的帮助! :)
  • 感谢您对 ACTG.*ACTG 的观察。这很有趣,我会在以后打算编写的软件中记住它。但是我使用之前的代码 sn-p 来测试 PCR 引物和探针,因为我允许错配,但是这个编程的精妙之处并没有被问题的“生物”条件解决:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多