Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 搜索字符串中的模式_Python_Search - Fatal编程技术网

Python 搜索字符串中的模式

Python 搜索字符串中的模式,python,search,Python,Search,我需要找到一个模式ATG[任意数量的任何字符三元组][TGA或TAG或TGA],其中我只需要第一个ATG,进一步到[TGA或TAG或TAA]不重要 这应该在[TGA或TAG或TAA]处中断。 在字符串中可以有几个这样的字符串,它们不需要重叠 例如,对“ATGCCCATGGGTAGATGTTTTAA”的搜索结果应为“ATGCCCATGGGTAG”和“ATGtttTAA” 在Python中有什么方法可以做到这一点吗 这是正则表达式的工作。(请注意,您的预期结果似乎与您的规范不匹配;您最初说您希望匹配

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

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

例如,对“ATGCCCATGGGTAGATGTTTTAA”的搜索结果应为“ATGCCCATGGGTAG”和“ATGtttTAA”


在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