在字符串中搜索模式

时间:2015-10-02 11:29:20

标签: python search

我需要找到一个模式ATG [任意数量的任何字符三元组] [TGA或TAG或TGA],其中我只需要第一个ATG,进一步[TGA或TAG或TAA]无关紧要。

这应该在[TGA或TAG或TAA]中断。 在字符串中可能有几个这样的,它们不需要重叠。

例如,搜索'ATGcccATGgggTAGgATGtttTAA'应该给出'ATGcccATGgggTAG'和'ATGtttTAA'作为结果。

有没有办法在Python中执行此操作?

2 个答案:

答案 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