【问题标题】:Using regex to search until desired pattern使用正则表达式搜索直到所需的模式
【发布时间】:2013-09-11 02:54:19
【问题描述】:

我正在使用以下正则表达式:

orfre = '^(?:...)*?((ATG)(...){%d,}?(?=(TAG|TAA|TGA)))' % (aa)

我基本上想找到所有以 ATG 开头的序列,然后是三联体(例如 TTA、TTC、GTC 等),直到它在框架中找到一个终止密码子。但是,正如我的正则表达式所写的那样,如果 aa 很大,它实际上不会停在终止密码子处。相反,它将继续搜索,直到找到满足 aa 条件的一个。我宁愿让它搜索整个字符串,直到找到终止密码子。如果匹配不够长(对于给定的 aa 参数),那么它应该返回 None。

字符串数据: AAAATGATGCATTAACCCTAATAA

正则表达式的期望输出: ATGATGCATTAA

除非 aa > 5,在这种情况下不应返回任何内容。

我得到的实际输出:ATGATGCATTAACCCTAA

【问题讨论】:

  • 在此处提供您的字符串数据。
  • @hwnd,好的,我编辑了 q。
  • 尝试以下(ATG)([ACGT]{3})*?(TAG|TAA|TGA)(ATG)((?!TAG|TAA|TGA)[ACGT]{3})+(TAG|TAA|TGA)之一
  • @hwnd 可以工作,除了正则表达式包含在指定最小氨基酸数量的函数中
  • 前几天有人问过这个问题,但是被删了。这个会怎么样?

标签: python regex bioinformatics


【解决方案1】:

这应该可以解决问题。 You can see it on codepad.

import re

num = 4
blue = 'XXXAAAATGATGCATTAACCCTAATAAXXX'
pattern = "^(?:...)*(ATG(...){%d}(?:TAG|TAA|TGA))" % num

m = re.match(pattern, blue)
print m.group(1)

哪个输出:ATGCATTAACCCTAATAA

分解:

^
(?:...)*           - Find, but don't capture any number of triplets.
(                  - Begin our capture block
  ATG              - A literal string of 'ATG', no need to wrap.
  (...)*           - Any number of triplets
  (?:TAG|TAA|TGA)  - A non capturing block of either 'TAG', 'TAA' or 'TGA'
)                  - End the capture block.

除非我遗漏了一些其他要求,否则不需要比这复杂得多。

【讨论】:

    【解决方案2】:

    补充说明:如果你想检查一个序列中可用的六个帧,不要忘记检查互补链:

    comp_chain = chain[::-1]    
    

    (--> extended slices)

    将后面的 A 音译为 T,将 G 音译为 C。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多