📅  最后修改于: 2023-12-03 14:46:32.013000             🧑  作者: Mango
在python中,我们可以通过find
、rfind
、index
、rindex
方法来获取字符串中给定子字符串出现的起始索引。不过这些方法只能返回字符串中第一次出现该子字符串的位置,如果要获取所有出现该子字符串的位置,我们需要使用正则表达式。
我们可以使用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]
使用递归的方式显得更加简洁,但是对于较大的字符串,可能会导致栈溢出,故需要斟酌使用。
以上就是获取给定子字符串的所有出现的起始索引的两种方法,对于字符串操作的应用中,可以帮助我们更方便地处理字符串。