我需要找到一个模式ATG [任意数量的任何字符三元组] [TGA或TAG或TGA],其中我只需要第一个ATG,进一步[TGA或TAG或TAA]无关紧要。
这应该在[TGA或TAG或TAA]中断。 在字符串中可能有几个这样的,它们不需要重叠。
例如,搜索'ATGcccATGgggTAGgATGtttTAA'应该给出'ATGcccATGgggTAG'和'ATGtttTAA'作为结果。
有没有办法在Python中执行此操作?
答案 0 :(得分:1)
这是正则表达式的工作。 (请注意,您的预期结果似乎与您的规范不符;您最初表示您想要匹配TGA,TAG或TGA,但是在结果中您匹配到TAA。我将假设字符串的结尾是意思是TGA。)
import re
target = 'ATGcccATGgggTAGgATGtttTGA'
results = re.findall(r'(ATG.*?(?:TAG|TGA|TGA))', target)
# ['ATGcccATGgggTAG', 'ATGtttTGA']
答案 1 :(得分:1)
我不是专业人士,所以可能会有更好的和/或更有效的解决方案,但这样做有:
s = 'ATGcccATGgggTAGgATGtttTAA'
start = 'ATG'
stop = ['TGA', 'TAG', 'TGA', 'TAA', 'TGG']
temp = ''
results = []
i = 0
while i < len(s):
if s[i].isupper():
temp = s[i:i+3]
if temp == start:
for j in range(3,len(s)-i):
if s[i+j].isupper():
temp = s[i+j:i+j+3]
if temp in stop:
temp = s[i:i+j+3]
i += j+3
results.append(temp)
break
else:
i += 1
print results