Python 搜索字符串中的模式
我需要找到一个模式ATG[任意数量的任何字符三元组][TGA或TAG或TGA],其中我只需要第一个ATG,进一步到[TGA或TAG或TAA]不重要 这应该在[TGA或TAG或TAA]处中断。 在字符串中可以有几个这样的字符串,它们不需要重叠 例如,对“ATGCCCATGGGTAGATGTTTTAA”的搜索结果应为“ATGCCCATGGGTAG”和“ATGtttTAA”Python 搜索字符串中的模式,python,search,Python,Search,我需要找到一个模式ATG[任意数量的任何字符三元组][TGA或TAG或TGA],其中我只需要第一个ATG,进一步到[TGA或TAG或TAA]不重要 这应该在[TGA或TAG或TAA]处中断。 在字符串中可以有几个这样的字符串,它们不需要重叠 例如,对“ATGCCCATGGGTAGATGTTTTAA”的搜索结果应为“ATGCCCATGGGTAG”和“ATGtttTAA” 在Python中有什么方法可以做到这一点吗 这是正则表达式的工作。(请注意,您的预期结果似乎与您的规范不匹配;您最初说您希望匹配
在Python中有什么方法可以做到这一点吗 这是正则表达式的工作。(请注意,您的预期结果似乎与您的规范不匹配;您最初说您希望匹配到TGA、TAG或TGA,但在结果中您匹配到TAA。我将假设字符串的结尾是TGA。)
我不是专业人士,因此可能会有更好和/或更有效的解决方案,但这确实起到了关键作用:
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
s='atgcccatgggtaggattttaa'
开始='ATG'
停止=['TGA'、'TAG'、'TGA'、'TAA'、'TGG']
温度=“”
结果=[]
i=0
而我
对不起,出了一个错误。我是要告诉匹配模式应该结束[TGA或TAG或TAA]。用TAA替换正则表达式中的一个TGA后,它就可以正常工作了!非常感谢你。这太棒了!谢谢,这是一种可能的方法,但是如果所有字母都是大写的话,它会起作用吗?不,不会。我认为那些填充字符总是小写的,它需要一些改变。但是你已经有了一个很好的解决方案,所以。。。
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