📌  相关文章
📜  在 Python 中查找字符串中子字符串的起始索引的所有出现次数(1)

📅  最后修改于: 2023-12-03 15:23:16.474000             🧑  作者: Mango

在 Python 中查找字符串中子字符串的起始索引的所有出现次数

在 Python 中,我们可以使用 str.find()str.index()re.findall() 等方法来查找字符串中子字符串的起始索引的所有出现次数。

使用 str.find()

str.find(sub[, start[, end]]) 方法返回子字符串 sub 在字符串中第一次出现的位置的索引。如果没找到,则返回 -1

我们可以循环使用 str.find() 方法来查找所有出现位置的索引,并将其保存在列表中。

s = "hello world, world is beautiful"
sub = "world"
start = 0
index_list = []

while True:
    index = s.find(sub, start)
    if index == -1:
        break
    index_list.append(index)
    start = index + 1

print(index_list) # [6, 13]
使用 str.index()

str.index(sub[, start[, end]]) 方法也是返回子字符串 sub 在字符串中第一次出现的位置的索引,与 str.fine() 的不同之处在于如果没找到则会抛出异常 ValueError

我们也可以循环使用 str.index() 方法来查找所有出现位置的索引,并将其保存在列表中。

s = "hello world, world is beautiful"
sub = "world"
start = 0
index_list = []

while True:
    try:
        index = s.index(sub, start)
    except ValueError:
        break
    index_list.append(index)
    start = index + 1

print(index_list) # [6, 13]
使用 re.findall()

re.findall(pattern, string, flags=0) 方法返回所有与模式 pattern 匹配的非重叠子字符串列表。我们只需使用模式 sub,就可以找到所有子字符串的位置。

import re

s = "hello world, world is beautiful"
sub = "world"
pattern = re.compile(sub)
index_list = [x.start() for x in re.finditer(pattern, s)]

print(index_list) # [6, 13]

以上就是查找字符串中子字符串的起始索引的所有出现次数的三种方法。根据不同的需求,选择适合的方法即可。