Python 使用正则表达式搜索所需的模式
我正在使用以下正则表达式:Python 使用正则表达式搜索所需的模式,python,regex,bioinformatics,Python,Regex,Bioinformatics,我正在使用以下正则表达式: orfre = '^(?:...)*?((ATG)(...){%d,}?(?=(TAG|TAA|TGA)))' % (aa) 我基本上想找到所有以ATG开头的序列,然后是三联体(例如TTA、TTC、GTC等),直到它在帧中找到一个终止密码子。然而,正如我的正则表达式所写的,如果aa很大,它实际上不会在终止密码子处停止。相反,它将继续搜索,直到找到满足aa条件的一个。我宁愿让它搜索整个字符串,直到找到一个终止密码子。如果匹配不够长(对于给定的aa参数),那么它应该返回
orfre = '^(?:...)*?((ATG)(...){%d,}?(?=(TAG|TAA|TGA)))' % (aa)
我基本上想找到所有以ATG开头的序列,然后是三联体(例如TTA、TTC、GTC等),直到它在帧中找到一个终止密码子。然而,正如我的正则表达式所写的,如果aa很大,它实际上不会在终止密码子处停止。相反,它将继续搜索,直到找到满足aa条件的一个。我宁愿让它搜索整个字符串,直到找到一个终止密码子。如果匹配不够长(对于给定的aa参数),那么它应该返回None
字符串数据:
aaaatgatgacctaataa
正则表达式的期望输出:
阿加塔塔
除非aa>5,在这种情况下,不应返回任何内容
我得到的实际输出:atgatgcattaacctaa这应该可以做到
其中输出:atgcattaacctaataa
细分:
^
(?:...)* - 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.
除非我遗漏了一些其他要求,否则它不需要比这复杂得多。补充说明:如果要检查一个序列中可用的六个帧,请不要忘记检查补充链:
comp_chain = chain[::-1]
(->)
翻译后一个A代表T,G代表C。在这里提供您的字符串数据。@hwnd,好的,我编辑了q。尝试下列方法之一:
(ATG)([ACGT]{3})*?(TAG | TAA | TGA)
或(ATG)((?!TAG | TAA | TGA)[ACGT]{3})+(TAG TAG | TAA | TGA)
@hwnd,除了正则表达式包含在一个指定最小氨基酸数的函数中之外,这个问题几天前提出过,但被删除了。这个会怎么样?
comp_chain = chain[::-1]