如何在python中的文本字符串中找到子字符串的开始位置?

时间:2019-04-08 16:42:32

标签: python

该问题提供了一个大字符串和一个子字符串。我要做的是编写一个代码,可以从大字符串中查找子字符串,并输出找到的子字符串的.start()位置。 例如: 样本数据集 GATATATGCATATACTT ATAT 样本输出 2 4 10

所以我写了一个代码(如下所示),但是,我注意到该代码会跳过示例数据集中的位置4,因为位置4的一半在2中?

请告诉我如何解决此问题。提前非常感谢!

import re
filename = open(input())
txt=filename.readline()
rlist=[]
text= "ATAT"
for m in re.finditer (text, txt):
    d = m.start()
    d += 1
    rlist.append(d)
print (rlist)

2 个答案:

答案 0 :(得分:0)

length=len(text)
rlist=[]
for i in range(len(txt)):
    if length+i < len(txt):
        if txt[i:i+length] == text:
            rlist.append(i+1)
print (rlist)

尝试一下! 如果条件用于检查数组索引超出范围的异常,则为1st

答案 1 :(得分:0)

这无需使用re就可以工作。请注意,我已注释掉文件导入部分,以便您可以仅测试找到文本的代码段。

#filename = open(input())
#txt=filename.readline()
txt='GATATATGCATATACTTATAT'
rlist=[]
text= "ATAT"
index=0
rlist=[]
while index < len(txt):   #loop through the text advancing one character at a time
        index = txt.find(text, index)
        if index == -1:
            break
        rlist.append(index+1)
        index += 1 # increment the index

print(rlist)
Out: [2, 4, 10, 18]

我将此答案基于this。该解决方案的优点在于,循环仅需要运行n+1次,其中n是文本中子字符串的数量。