📅  最后修改于: 2023-12-03 15:04:26.273000             🧑  作者: Mango
在字符串处理过程中,我们经常需要查找字符串中第 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()
方法。对于大多数场景来说,使用正则表达式是最灵活和最通用的方法。