我不擅长正则表达式,正在寻找一些在线资源来了解我想做的事情。所以基本上,我在 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
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
