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]