📌  相关文章
📜  Python|获取给定子字符串的所有出现的起始索引(1)

📅  最后修改于: 2023-12-03 14:46:32.013000             🧑  作者: Mango

Python | 获取给定子字符串的所有出现的起始索引

在python中,我们可以通过findrfindindexrindex方法来获取字符串中给定子字符串出现的起始索引。不过这些方法只能返回字符串中第一次出现该子字符串的位置,如果要获取所有出现该子字符串的位置,我们需要使用正则表达式。

使用正则表达式

我们可以使用re模块中的search和findall方法来获取所有匹配的对象,从而确定给定子字符串所有出现的起始索引。

import re

def get_start_indexes(string, substring):
    indexes = [m.start() for m in re.finditer(substring, string)]
    return indexes

s = 'hello world, world is beautiful'
substr = 'wo'
indexes = get_start_indexes(s, substr)
print('Substring',substr,'occurs at:',indexes)

输出结果如下:

Substring wo occurs at: [6, 18]
使用递归

我们也可以使用递归的方式来获取所有出现子字符串的位置。

def get_start_indexes(string, substring, index=0, indexes=[]):
    i = string.find(substring, index)
    if i == -1:
        return indexes
    else:
        indexes.append(i)
        return get_start_indexes(string, substring, i+1, indexes)

s = 'hello world, world is beautiful'
substr = 'wo'
indexes = get_start_indexes(s, substr)
print('Substring',substr,'occurs at:',indexes)

输出结果同样为:

Substring wo occurs at: [6, 18]

使用递归的方式显得更加简洁,但是对于较大的字符串,可能会导致栈溢出,故需要斟酌使用。

以上就是获取给定子字符串的所有出现的起始索引的两种方法,对于字符串操作的应用中,可以帮助我们更方便地处理字符串。