想象一长串字符:“AATTAATCTATATATTGAAATGGGGCCCCAATTTTCCCAAATC ....”
我定义了4个字符串:
"AAT"
"ATG"
"TTT"
"ATC"
我的任务是在长字符串中找到每个字符串“AAT”的“终点”。我的终点是最后三个字符串“ATG”、“TTT”、“ATC”,这意味着我需要找到起始位置“AAT”到结束位置的索引,可以是“ATG”、“TTT” ”或“空中交通管制”。我被告知要以 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”开始并停止直到遇到端点之一的函数?
希望这是可以理解的
您可以使用正则表达式来做到这一点:
>>> 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。匹配对象的 start() 和 end() 方法给出匹配字符串的开始和结束索引。
正则表达式搜索 AAT,后跟任何内容,包括第一次出现的 ATG、TTT 或 ATC。
如果您在程序运行之前不知道开始和结束字符串,则可能需要动态构造正则表达式 - 这非常简单:
start = "AAT"
end = ["ATG", "TTT", "ATC"]
regex = "%s.*?(?:%s)" % (start, '|'.join(end))
我是一名优秀的程序员,十分优秀!