我想使用正则表达式来查找一个子字符串,后跟可变数量的字符,然后是几个子字符串中的任何一个。
重新查找
"ATGTCAGGTAAGCTTAGGGCTTTAGGATT"
应该给我:
['ATGTCAGGTAA', 'ATGTCAGGTAAGCTTAG', 'ATGTCAGGTAAGCTTAGGGCTTTAG']
我尝试了以下所有方法均未成功:
import re
string2 = "ATGTCAGGTAAGCTTAGGGCTTTAGGATT"
re.findall('(ATG.*TAA)|(ATG.*TAG)', string2)
re.findall('ATG.*(TAA|TAG)', string2)
re.findall('ATG.*((TAA)|(TAG))', string2)
re.findall('ATG.*(TAA)|(TAG)', string2)
re.findall('ATG.*(TAA)|ATG.*(TAG)', string2)
re.findall('(ATG.*)(TAA)|(ATG.*)(TAG)', string2)
re.findall('(ATG.*)TAA|(ATG.*)TAG', string2)
我在这里错过了什么?
请您参考如下方法:
这不是 super 简单,因为 a) 你想要重叠匹配,并且 b) 你想要贪婪和非贪婪以及介于两者之间的一切。
只要字符串相当短,您就可以检查每个子字符串:
import re
s = "ATGTCAGGTAAGCTTAGGGCTTTAGGATT"
p = re.compile(r'ATG.*TA[GA]$')
for start in range(len(s)-6): # string is at least 6 letters long
for end in range(start+6, len(s)):
if p.match(s, pos=start, endpos=end):
print(s[start:end])
这打印:
ATGTCAGGTAA
ATGTCAGGTAAGCTTAG
ATGTCAGGTAAGCTTAGGGCTTTAG
由于您似乎在处理 DNA 序列或类似的东西,请务必查看 Biopython ,也是。
