Skip to main content
 首页 » 编程设计

python之如何在正则表达式中使用 bool 值或

2024年08月22日24bonelee

我想使用正则表达式来查找一个子字符串,后跟可变数量的字符,然后是几个子字符串中的任何一个。

重新查找

"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 ,也是。