如何:在一长串字符串中从一个字符串到另一个字符串

时间:2011-09-27 21:15:46

标签: python string list

想象一下很长的一串字符: “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”开始并停止直到遇到其中一个结束点的函数?

希望这在某种程度上是可以理解的

1 个答案:

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