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

如何用正则表达式从拼接字符串中提取多个独立AUG-UAA子串?

解决正则贪婪匹配导致的子串提取问题

原正则r'AUG\w*UAA'只返回完整长串的原因很简单:\w*是贪婪量词,它会尽可能抓取从第一个AUG到最后一个UAA之间的所有字符,直接跨过中间的UAA和第二个AUG。

要提取到两个独立的目标子串,有两种实用方法:

方法1:使用非贪婪量词

把贪婪的\w*改成非贪婪的\w*?,正则就会匹配从AUG开始到最近的UAA结束的内容,不会过度抓取。

代码示例:

import re

target_str = "AUGACGCAUAACCGACGAUGCAGCGGGCAACUAA"
matches = re.findall(r'AUG\w*?UAA', target_str)
print(matches)
# 输出结果: ['AUGACGCAUAA', 'AUGCAGCGGGCAACUAA']

方法2:使用否定前瞻确保匹配独立性

如果需要更严谨地避免中间出现新的AUG(防止意外嵌套匹配),可以用否定前瞻语法,限定AUG和UAA之间的内容不能包含新的AUG:

import re

target_str = "AUGACGCAUAACCGACGAUGCAGCGGGCAACUAA"
matches = re.findall(r'AUG(?:(?!AUG)\w)*UAA', target_str)
print(matches)
# 输出结果同样符合预期

这里(?:(?!AUG)\w)*的逻辑是:重复匹配任意字符,但每次匹配前都会检查当前位置不是AUG的起始,确保每个匹配块都是独立的AUG→UAA单元。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:45:31