首页 > 编程问答 >查找字符串中第 n 次出现的子字符串

查找字符串中第 n 次出现的子字符串

时间:2024-07-21 11:51:46浏览次数:9  
标签:python string substring

这看起来应该是相当微不足道的,但我是 Python 新手,想要以最 Pythonic 的方式来做。

我想找到与字符串中第 n 次出现的子字符串相对应的索引。|| |必须有一些与我想做的事情相当的东西,即

如何在Python中实现这一点?

mystring.find("substring", 2nd)

How can you achieve this in Python?


你可以使用 string.find 的变体来找到 Python 字符串中第 n 次出现的子字符串。但是,没有直接的方法像 mystring.find("substring", 2nd) 这样来完成。

方法如下:

1. 使用 find 进行循环:

def find_nth_occurrence(string, substring, n):
  """
  此函数返回字符串中第 n 次出现的子字符串的索引。

  Args:
    string: 要搜索的字符串。
    substring: 要搜索的子字符串。
    n: 子字符串的序号。

  Returns:
    子字符串的第 n 次出现的索引,如果找不到则返回 -1。
  """
  start = -1
  for i in range(n):
    start = string.find(substring, start + 1)
    if start == -1:
      return start
  return start

# 示例用法
mystring = "This is a test string with multiple test occurrences."
substring = "test"
n = 2

index = find_nth_occurrence(mystring, substring, n)

if index != -1:
  print(f"第 {n} 次出现的 '{substring}' 位于索引:{index}")
else:
  print(f"'{substring}' 没有出现 {n} 次。")

此函数以迭代方式使用 find 方法来查找第 n 次出现的子字符串。它维护一个 start 索引,并在每次迭代中更新它以查找下一个出现的子字符串。

2. 使用 re.finditer (正则表达式):

import re

def find_nth_occurrence_regex(string, substring, n):
  """
  此函数使用正则表达式返回字符串中第 n 次出现的子字符串的索引。

  Args:
    string: 要搜索的字符串。
    substring: 要搜索的子字符串。
    n: 子字符串的序号。

  Returns:
    子字符串的第 n 次出现的索引,如果找不到则返回 -1。
  """
  occurrences = list(re.finditer(substring, string))
  if len(occurrences) >= n:
    return occurrences[n-1].start()
  else:
    return -1

# 示例用法
mystring = "This is a test string with multiple test occurrences."
substring = "test"
n = 2

index = find_nth_occurrence_regex(mystring, substring, n)

if index != -1:
  print(f"第 {n} 次出现的 '{substring}' 位于索引:{index}")
else:
  print(f"'{substring}' 没有出现 {n} 次。")

此方法使用正则表达式中的 re.finditer 函数来查找所有出现的子字符串,然后从匹配列表中返回第 n 次出现的索引。

这些方法提供了在 Python 中查找字符串中第 n 次出现的子字符串的不同方法。可以根据自己的特定需求和编码风格选择最适合的方法。

标签:python,string,substring
From: 1883980

相关文章

  • 在 Python 中将 2 列的数据框转换为一系列 2 列
    我正在尝试处理一些时间序列数据,并且对pandas数据框相当陌生。我有一个包含两列的数据框,如下所示:+---+-----------------------+-------+--+||0|1||+---+-----------------------+-------+--+|1|2018-08-0223:00:00|456.8||......
  • 基于python的非平稳时间序列模型
    前言平稳时间序列指的是宽平稳时间序列,就是指时间序列的均值、方差和协方差等一二阶矩存在但不随时间改变,表现为时间的常数。若三个条件有一个不成立,那么就称该序列为非平稳时间序列。包括确定性趋势时间序列和随机性趋势时间序列。要想把非平稳的时间序列转化为平稳的时......
  • 猫头虎 Python知识点分享:pandas--read_csv()用法详解
    ......
  • 使用 Python 绘图
    我有一个.txt文件,从中找到有序对,然后使用numpy和matplotlib绘制图形。例如,这些是我的有序对:[[(4.0,0),(0,6.0)],[(6.0,0),(0,3.0)]](每个子列表代表最终图形中的一条线)图形如下所示:但我想找到两条线之间的交点。如果有更多的线,我怎样才能找到它们......
  • 用python计算形状的距离
    我想计算该图像的最小垂直距离和最大水平距离。就像线条一样。我正在尝试:_,binary_image=cv2.threshold(image,0,255,cv2.THRESH_BINARY)horizontal_distances=np.sum(binary_image==255,axis=1)max_horizontal_distance=np.max(horizontal_distance......
  • 在感知器学习模型的 Python 实现中将数组传递给 numpy.dot()
    我正在尝试将单层感知器分类器的Python实现放在一起。我发现SebastianRaschka的《Python机器学习》一书中的示例非常有用,但我对他的实现的一小部分有疑问。这是代码:importnumpyasnpclassPerceptron(object):"""Perceptronclassifier.Parameters......
  • 带时间戳的 Python 命令行历史记录
    有没有办法记录每个命令的时间?例如,挂钩交互式shell,以便它将相同的内容写入~/.python_history到~/.python_history_timestamps但带有时间戳?我正在跟踪我白天所做的事情并将其放入我的日历中。为了帮助回溯,我使用了firefox历史记录、Dropbox活动、一个......
  • 在 python3 中迭代字典键时无法删除它:“RuntimeError:字典在迭代期间更改了大小”
    我试图在迭代字典时从字典中删除一个键。从字典中删除键时,我得到:RuntimeError:dictionarychangedsizeduringiteration我的代码:mydict={'one':1,'two':2,'three':3,'four':4}fork,vinmydict.items():ifk=='two'......
  • Python pyTelegramBotAPI:设置不受循环影响的变量
    我想创建一个基本上是布尔值的变量(无论机器人是否工作)。但是,当使用TeleBot.polling()时,脚本开始无限循环,所以如果我在代码开头设置一个变量就像:is_bot_working=True,变量将始终为真,反之亦然。那么,我应该如何设置一个不受循环影响的变量?这就是代码:impor......
  • 编解码器无法解码位置 2-3 中的字节:截断的 \UXXXXXXXX 转义 (Python QREADER)
    我正在尝试pythonqreader模块,但每次我尝试运行它时,我都会收到SyntaxError:(unicodeerror)'unicodeescape'codeccan'tDecodebytesinposition2-3:truncated\UXXXXXXXXescapeerror.fromqreaderimportQReaderfromcv2importQRCodeDetector,imreadfrompyz......