迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中字符串中子字符串的第 N 次出现

作者:迹忆客 最近更新:2023/03/01 浏览次数:

Python 中的字符串用于存储一系列字符,以便我们可以对它们执行不同的操作。Python 中的子字符串是包含在另一个字符串中的一组字符。

在本文中,我们将提取子字符串在第 n 次之后出现的索引,并讨论在 Python 中查找子字符串的第 n 个索引的各种方法。

在这个例子中,我们得到一个字符串和一个子字符串以及值 n,这样我们需要找到我们的子字符串在第 n 次之后出现在原始字符串中的索引。假设我们得到一个字符串 s,子字符串 str,其值为 n

示例代码:

s = "batpollbatsitbat"
str = "bat"
n = 2

输出:

7

我们需要返回我们的子字符串 "bat" 第二次出现在原始字符串中的索引。因此,我们将根据基于 0 的索引返回 7 作为输出。

Python 的 split() 方法用于通过指定的分隔符将给定的字符串拆分为字符串列表。但是,我们可以显式指定分隔符(空格),我们需要在其中打破字符串。

split() 函数还采用第二个参数作为参数 maxsplit,用于指定在找到子字符串后需要中断字符串的次数。

在下面的示例中,我们需要将字符串 n 次拆分,其中 n 是问题中给出的第 n 次出现。

示例代码:

def solve(s, str, n):
    sep = s.split(str, n)
    if len(sep) <= n:
        return -1
    return len(s) - len(sep[-1]) - len(str)
print(solve('foobarfobar akfjfoobar afskjdffoobarruythfoobar', 'foobar', 2))

输出:

16

我们在上面的程序中有一个函数 solve(),它的主要逻辑已经实现。第一行使用 split() 函数,其中子字符串 str 作为分隔符传递,n 的值作为 maxsplit 的值传递。

在这一行之后,我们的字符串 s 被分解成一个字符串列表。存储在 sep 变量中的字符串列表根据以下示例中的输入进行分隔。

['', 'fobar akfj', ' afskjdffoobarruythfoobar']

原始字符串在我们找到子字符串 str 的索引处分隔。但是,由于 n 的值,这种拆分只发生了两次。

sep 变量中存储的最后一个字符串在某些索引处与我们的子字符串匹配,但我们没有将它们分开。

split() 函数之后,我们检查了一个条件,即 sep 变量的长度是否大于 n 的值,因为如果存在用户试图搜索第 n 次出现的情况对于不存在 n 次的子字符串,在这种情况下,我们需要返回 -1

现在是我们的主要逻辑,计算子字符串第 n 次出现的索引,并且我们只将字符串分隔了 n 次。因此,在第 n 次出现子字符串之后可能留下的字符串被存储为 sep 变量的最后一个元素。

因此,我们用 sep 变量中存在的最后一个字符串的长度减去原始字符串 s 的长度,该变量以 sep[-1] 访问。

这给出了我们想要的子字符串的出现结束的索引,但是由于我们需要起始索引,我们也将减去子字符串的长度。

通过这种方式,我们可以计算出第 n 次出现的子字符串的索引。

Python 中的 find() 方法用于查找指定值第一次出现的索引。我们还可以在 find() 函数中指定开始和结束索引。

这些开始和结束索引告诉我们将搜索限制在指定范围内。

示例代码:

s = "xyxyxyxybvxy"
str = "xy"
n = 4
x = -1
for i in range(0, n):
    x = s.find(str,x+1)
print ("Nth occurrence is at", x)

输出:

Nth occurrence is at 6

我们对字符串 s 应用了 find() 函数,它将在每次迭代中找到原始字符串中子字符串的第一次出现。

在我们的代码中,在第一次迭代中,由于 x 的值(最初是 -1),原始字符串将从 0th 索引搜索到末尾,但是在 find() 函数中,它变为 x+1 = -1+1 = 0)。

此迭代将使我们在原始字符串中首次出现子字符串。然而,第二次迭代将从索引 1 搜索字符串到末尾(因为 x 在前一次迭代中变为 0 并且 find() 函数变为 x+1 = 0+1 = 1)。

此迭代将为我们提供第二次出现的子字符串。我们可以进行这样的 n 次迭代来找到字符串的第 n 次出现。

正则表达式用于在字符串中查找特定模式,它是一个字符序列,可以让我们形成搜索模式。Python 有一个称为 re 的正则表达式包。

我们将使用 re 包来查找第 n 次出现的子字符串。

示例代码:

import re
s = "yoofpofbof"
n = 3
result = [m.start() for m in re.finditer(r"of" , s)]
if(len(result)<=n):
    print(result[n-1])

输出:

8

我们在第一行导入了 re 包以使用上述代码中的正则表达式。之后,我们的输入就被定义了。

我们使用 re 包中的 finditer() 方法,它为我们提供了原始字符串中所有匹配子字符串的开始和结束索引,但我们只需要开始索引即可找到第 n 次出现。

因此,我们使用 m.start() 方法,它只会给我们匹配的子字符串的起始索引。

我们使用 for 循环查找子字符串的所有起始索引并将它们存储在 result 变量中。现在,如果用户提供了不在字符串中的 n 的值,它将抛出错误,因为我们检查了结果列表的长度和 n 变量之间的条件。

最后,我们打印子字符串第 n 次出现的索引。

在本教程中,我们讨论了三种不同的方法来查找字符串中第 n 次出现的子字符串。这些方法,如 find() 函数、split() 函数和正则表达式方法,已经进行了非常详细的讨论,以使其更加清晰。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

Django 返回 JSON

发布时间:2023/05/04 浏览次数:106 分类:Python

在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。

在 Django 中创建对象

发布时间:2023/05/04 浏览次数:59 分类:Python

本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。

在 Django 中为多项选择创建字段

发布时间:2023/05/04 浏览次数:75 分类:Python

在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便