如何在python中查找字符串中所有出现的子字符串

时间:2019-09-01 00:13:47

标签: python string find

我需要帮助来说明我在堆栈溢出中找到的此解决方案如何工作。为什么如果k = -1,您是否需要返回头寸。如果我将其更改为返回其他任何内容,则它将不起作用。谢谢。

def findSubstring(sequence, substring):
    positions = []
    k = 0
    while k < len(sequence):
        k = sequence.find(substring, k)
    if k == -1:
        return positions
    else:
        positions.append(k)
        k += 1 #change to k += len(sub) to not search overlapping results
print(positions)

1 个答案:

答案 0 :(得分:0)

str.find()返回第一次出现的子字符串的索引(如果找到)。如果找不到,则返回-1。

这是findSubstring函数中发生的事情:

  • 首先,创建一个空列表,以便以后添加子字符串的出现索引。

  • while k < len(sequence):我们要查找子字符串,直到找到序列的最后一个索引。

  • k = sequence.find(substring, k):我们在索引k之后增加了子字符串的第一个匹配项的索引(对于第一次迭代,它应该是序列的开始,这就是设置k=0的原因在while语句之前。)

  • 现在,如果子字符串不在序列k=-1中,则该子字符串出现的索引也不是。

  • if k == -1: return(positions):如果未找到子字符串,则返回k=-1和空的positions列表,否则将索引k附加到{{1 }}和positions将确保在下一次迭代中,我们在刚找到索引tha之后寻找子字符串。

  • 我们遍历k,直到到达序列的末尾(k +=1

  • while k len(sequence):该函数返回索引列表,最后我们将其打印出来。