Skip to main content
 首页 » 编程设计

python之获取与正则表达式模式匹配的完整子字符串

2025年05月04日15Leo_wl

我不擅长正则表达式,正在寻找一些在线资源来了解我想做的事情。所以基本上,我在 Python 中有一个正则表达式,如下所示:

import re 
pattern = re.compile(r'(?=(ATG(?:...)*?)(?=TAG|TGA|TAA))') 

这应该找到所有以 ATG 开头并以 TAG 或 TGA 或 TAA 结尾的子字符串。我将其用作:

str = "ATGCCCTAG" 
print pattern.findall(str) 

但是,这会返回 ATGCCC 并删除尾随的 TAG,我希望它保留尾随的 TAG。我如何更改它以提供完整的子字符串?

请您参考如下方法:

To find all sub strings which begin with ATG and end in TAG or TGA or TAA

你需要一个

ATG(?:...)*?(?:TAG|TGA|TAA) 

这个正则表达式还确保在 ATG 和最后一个 TAG 之间有 0 个或多个 3 符号(不包括换行符)序列,TGA 或 TAA。

参见 regex demo

Python demo :

import re 
p = re.compile(r'ATG(?:...)*?(?:TAG|TGA|TAA)') 
test_str = "FFG FFG ATGCCCTAG" 
print (p.findall(test_str)) 

如果您需要查找非重叠 子字符串,这将起作用。要找到重叠的,技术是将其封装到一个捕获组中,并放置在一个 unanchored 积极前瞻中:

r'(?=(ATG(?:...)*?(?:TAG|TGA|TAA)))' 
  |  |                           || 
  |  | --- Capture group ------- ||    
  | -- Positive look-ahead ------ | 

参见 regex demo