我正在使用以下正则表达式:
orfre = '^(?:...)*?((ATG)(...){%d,}?(?=(TAG|TAA|TGA)))' % (aa)
我基本上想要找到所有以ATG开头的序列,然后是三联体(例如TTA,TTC,GTC等),直到它在框架中找到终止密码子。但是,正如我的正则表达式所写,如果aa很大,它实际上不会停在终止密码子上。相反,它将继续搜索,直到找到满足aa条件的一个。我宁愿让它搜索整个字符串,直到找到终止密码子。如果匹配不够长(对于给定的aa参数),那么它应该返回None。
字符串数据: AAAATGATGCATTAACCCTAATAA
正则表达式所需的输出: ATGATGCATTAA
除非aa> 5,在这种情况下不应返回任何内容。
我得到的实际输出:ATGATGCATTAACCCTAA
答案 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。