📌  相关文章
📜  Python|查找字符串中第 n 次出现的子字符串的方法(1)

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

Python | 查找字符串中第 n 次出现的子字符串的方法

在字符串处理过程中,我们经常需要查找字符串中第 n 次出现的子字符串,本文将介绍 Python 中实现这个需求的几种方法。

方法一:使用正则表达式

我们可以使用正则表达式中的 re.findall() 方法来搜索所有符合条件的子字符串,然后根据下标返回第 n 次出现的字符串。

import re

def find_nth(string, substring, n):
    pattern = re.compile(substring)
    match_list = pattern.findall(string)
    return match_list[n-1] if len(match_list) >= n else -1

使用示例:

string = "hello world, hello python, hello python, hello python"
substring = "python"
n = 2
print(find_nth(string, substring, n))  # 输出:"hello python"

如果没有找到符合条件的子字符串,则返回 -1。

方法二:使用字符串的 split()join() 方法

我们可以先将原字符串按照子字符串分割成列表,然后通过下标获取第 n 次出现的字符串。

def find_nth(string, substring, n):
    parts = string.split(substring, n+1)
    if len(parts) <= n+1:
        return -1
    return ''.join(parts[:n]) + substring

使用示例:

string = "hello world, hello python, hello python, hello python"
substring = "python"
n = 2
print(find_nth(string, substring, n))  # 输出:"hello python"

如果没有找到符合条件的子字符串,则返回 -1。

方法三:使用字符串的 find()count() 方法

我们可以利用字符串的 find() 方法找到第 n 次出现的子字符串的起始下标,然后再利用字符串的 count() 方法统计子字符串出现的次数,最后根据下标对字符串进行切片。

def find_nth(string, substring, n):
    start = string.find(substring)
    while start >= 0 and n > 1:
        start = string.find(substring, start+len(substring))
        n -= 1
    if start == -1:
        return -1
    end = start + len(substring)
    return string[start:end]

使用示例:

string = "hello world, hello python, hello python, hello python"
substring = "python"
n = 2
print(find_nth(string, substring, n))  # 输出:"hello python"

如果没有找到符合条件的子字符串,则返回 -1。

总结

本文介绍了三种在 Python 中查找字符串中第 n 次出现的子字符串的方法,分别是使用正则表达式、字符串的 split()join() 方法,以及字符串的 find()count() 方法。对于大多数场景来说,使用正则表达式是最灵活和最通用的方法。