Python 字符串 find() 方法完全指南:语法、参数、替代方案与计数技巧
什么是 Python String.find()?
String.find() 方法返回指定子串在字符串中首次出现的索引。未找到时优雅返回 -1 而非抛异常,是子串搜索的便捷选择。
本指南涵盖 find() 高效用法、参数详解、相关方法对比、甚至统计子串出现次数。
- 理解 String.find()
- 语法与参数
- 默认参数用法
- 指定起始索引
- 指定起止范围
- 查找子串位置
- 对比 rfind()
- 对比 index()
- 统计子串出现次数
Python string find() 语法
方法签名直观:
string.find(substring, start, end)
参数
- substring – 要搜索的文本。
- start(可选) – 搜索起始索引,默认
0。 - end(可选) – 搜索结束索引,默认字符串长度。
使用默认值的 find()
无 start/end 时,find() 从头扫描整字符串。返回首次匹配索引或 -1。
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("Tutorials 位置:", mystring.find("Tutorials"))
输出:
Tutorials 位置: 12
指定起始索引
提供 start 限制搜索从该位置开始,直到字符串末尾。
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("从索引 20 开始找 Tutorials:", mystring.find("Tutorials", 20))
输出:
从索引 20 开始找 Tutorials: 48
指定起止范围
同时提供 start 和 end 将搜索限制在特定切片。
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("索引 5-30 间找 Tutorials:", mystring.find("Tutorials", 5, 30))
输出:
索引 5-30 间找 Tutorials: 12
查找位置与处理缺失子串
find() 子串存在与不存在时的行为:
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("Best site 位置:", mystring.find("Best site", 5, 40))
print("Guru99 从索引 20 开始找:", mystring.find("Guru99", 20))
输出:
Best site 位置: 27
Guru99 从索引 20 开始找: -1
对比 rfind()
rfind() 类似 find() 但返回子串出现的最高索引(最后一次)。均未找到返回 -1。
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("find() 结果:", mystring.find("Tutorials"))
print("rfind() 结果:", mystring.rfind("Tutorials"))
输出:
find() 结果: 12
rfind() 结果: 48
对比 index()
index() 行为像 find() 但子串缺失时抛 ValueError。
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("find() 结果:", mystring.find("Tutorials"))
print("index() 结果:", mystring.index("Tutorials"))
输出:
find() 结果: 12
index() 结果: 12
子串不存在时:
mystring = "Meet Guru99 Tutorials Site.Best site for Python Tutorials!"
print("find() 结果:", mystring.find("test"))
print("index() 结果:", mystring.index("test"))
输出:
find() 结果: -1
Traceback (most recent call last):
File "task1.py", line 3, in
print("index() 结果:", mystring.index("test"))
ValueError: substring not found
统计子串出现次数
循环调用 find() 并更新起始索引可统计总出现次数。
my_string = "test string test, test string testing, test string test string"
startIndex = 0
count = 0
for _ in range(len(my_string)):
k = my_string.find('test', startIndex)
if k != -1:
startIndex = k + 1
count += 1
print("子串 'test' 总出现次数:", count)
输出:
子串 'test' 总出现次数: 6
核心要点
find()返回首个匹配索引或-1(不存在)。- 参数:
substring、可选start(默认 0)、可选end(默认长度)。 - 用
start指定搜索起始位置。 - 用
start和end限制搜索切片。 rfind()返回最后匹配索引。index()更严格,缺失抛异常。- 循环配合
find()可统计总出现次数。
Python
- Python strip() 方法完全指南:去除首尾空白与自定义字符实战
- Python str.count() 完全指南:统计字符与子串出现次数实战
- Python format() 字符串格式化完全指南:占位符、格式化规范、类与字典应用
- Python len() 函数实战指南:测量字符串、列表、元组、字典等对象长度
- 精通 Python Lambda 函数:实用示例与最佳实践
- Python round() 函数详解与实战示例
- 精通 Python map() 函数:语法、示例与最佳实践
- Python timeit():精准测量代码执行时间与实战示例
- 理解 Python type() 与 isinstance():实战示例详解
- Java String length() 方法:获取字符串长度(示例)
- 精通 Java String.indexOf():定位子字符串与实战示例
- Java String.charAt() 详解:语法、返回类型、异常与实战示例