You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式匹配以ATG开头、TAA/TGA/TAG结尾的多段序列

匹配所有以ATG起始、终止密码子结尾的ORF序列

嘿,看你的需求,是要找出DNA序列里所有符合开放阅读框(ORF)规则的子序列——从ATG开始,到TAA/TGA/TAG中任意一个终止密码子结束,还要覆盖多个起始ATG的情况,对吧?你的例子里两个ATG各对应3个结果,总共6个,这个需求很典型,我来给你捋清楚怎么实现。

首先得明确核心问题:普通的非贪婪匹配(比如ATG.*?(TAA|TGA|TAG))只能拿到每个ATG后面第一个终止密码子的序列,但你需要的是每个ATG后面所有可能的终止密码子对应的完整子序列,所以得换个思路。

方法一:正则正向预查(一次性捕获所有结果)

我们可以利用正则的**正向预查(lookahead)**特性,它能在不消耗字符的情况下匹配所有可能的组合,完美覆盖你的需求。具体代码如下:

import re

seq = 'GATGATCGATGCTGACGTATAGGTTAAC'
# 用正向预查捕获所有符合条件的子序列
matches = re.findall(r'(?=(ATG.*?(TAA|TGA|TAG)))', seq)
# 提取完整匹配结果(findall会返回组内容,取每个元组的第一个元素)
result = [match[0] for match in matches]

print(result)

运行后会得到你要的6个结果:

['ATGATCGATGCTGA', 'ATGATCGATGCTGACGTATAG', 'ATGATCGATGCTGACGTATAGGTTAA', 'ATGCTGA', 'ATGCTGACGTATAG', 'ATGCTGACGTATAGGTTAA']

正则规则解释:

  • (?=...):正向预查,会检查当前位置后是否存在匹配内容,但不会移动正则的匹配指针,因此能捕获所有重叠的可能组合
  • ATG:精准匹配起始密码子
  • .*?:非贪婪匹配任意字符(这里对应DNA的A/T/C/G),直到遇到后面的终止密码子
  • (TAA|TGA|TAG):匹配任意一个终止密码子

方法二:手动定位起始+终止位置(更直观可控)

如果你觉得正则的预查逻辑有点绕,也可以手动找出所有ATG的起始位置,再逐个定位每个起始点后的所有终止密码子,最后截取序列,代码逻辑更清晰:

seq = 'GATGATCGATGCTGACGTATAGGTTAAC'
start_codon = 'ATG'
stop_codons = {'TAA', 'TGA', 'TAG'}
matches = []

# 找出所有ATG的起始索引
start_positions = []
pos = 0
while True:
    pos = seq.find(start_codon, pos)
    if pos == -1:
        break
    start_positions.append(pos)
    pos += 1  # 允许重叠的ATG(比如ATGATG这种情况),如果要跳过重叠就改成pos +=3

# 对每个起始位置,找出所有终止密码子并截取序列
for start in start_positions:
    pos = start + 3  # 从起始密码子之后开始查找
    while pos <= len(seq) - 3:
        current_codon = seq[pos:pos+3]
        if current_codon in stop_codons:
            matches.append(seq[start:pos+3])
        pos += 1  # 逐个位置遍历,避免遗漏可能的终止密码子

print(matches)

这段代码同样能输出目标结果,好处是你可以灵活调整规则——比如要不要允许起始密码子重叠,或者要不要严格按3的倍数步进(保证终止密码子在正确阅读框)。

额外提示

  • 如果需要严格遵循密码子阅读框(即从ATG开始每3个字符一组,直到终止密码子),可以把找终止密码子的步进逻辑改成pos +=3,这样只会匹配处于正确阅读框的终止密码子。
  • 若序列中存在大量重复的ATG或终止密码子,正则方法的效率会更高一些。

内容的提问来源于stack exchange,提问作者Christos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:54:45