0

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

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

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

字符串数据:AAAATGATGCATTAACCCTAATAA

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

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

我得到的实际输出:ATGATGCATTAACCCTAA

4

2 回答 2

0

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

comp_chain = chain[::-1]    

(-->扩展切片

将后一个 A 音译为 T,将 G 音译为 C。

于 2013-09-12T09:53:29.927 回答
0

这应该可以解决问题。您可以在键盘上看到它

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.

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

于 2013-09-11T03:43:51.080 回答