想象一下很长的一串字符: “AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ....”
我定义了4个字符串:
"AAT"
"ATG"
"TTT"
"ATC"
我的任务是找到长字符串中每个字符串“AAT”的“终点”。我的终点是最后三个字符串“ATG”,“TTT”,“ATC”,这意味着我需要找到我的起始位置“AAT”的索引到我的结束位置,可以是“ATG”,“TTT” “或”ATC“。我被告知要以3的步骤前进,但我不知道该怎么做。
我试过这样做:
open1=open(<text>)
u=open1.read()
string1="AAT
while True:
p=u.find(string1,p)
p=p+1
mylist.append(p)
print mylist
,它将在我的文本文件中打印字符串“ATG”的位置。我不知道如何继续前进。我想我也可以找到其他字符串的位置,但是如何创建一个从“ATG”开始并停止直到遇到其中一个结束点的函数?
希望这在某种程度上是可以理解的
答案 0 :(得分:1)
您可以使用正则表达式执行此操作:
>>> import re
>>> s = "AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ...."
>>> [(m.start(), m.end()) for m in re.finditer('AAT.*?(?:ATG|TTT|ATC)', s)]
[(0, 8), (18, 34)]
re.finditer搜索正则表达式的多个非重叠匹配,并为每个匹配返回一个MatchObject。 match对象的start()和end()方法给出匹配字符串的开始和结束索引。
正则表达式搜索AAT后跟任何东西,包括首次出现的ATG,TTT或ATC。
如果你不知道启动和放大,你可能需要动态构建正则表达式。在程序运行之前结束字符串 - 这很简单:
start = "AAT"
end = ["ATG", "TTT", "ATC"]
regex = "%s.*?(?:%s)" % (start, '|'.join(end))