使用正则表达式搜索直到所需的模式

时间:2013-09-11 02:54:19

标签: python regex bioinformatics

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

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

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

字符串数据: AAAATGATGCATTAACCCTAATAA

正则表达式所需的输出: ATGATGCATTAA

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

我得到的实际输出:ATGATGCATTAACCCTAA

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题。 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.

除非我缺少其他一些要求,否则它不应该比这复杂得多。

答案 1 :(得分:0)

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

comp_chain = chain[::-1]    

( - > extended slices

将后者A替换为T'和G'代替C。