Python 字符串 find() 方法

Python find() 语法

find() 是 Python 字符串的一个方法,它用于获取子串第一次出现的下标。如果找不到子串,则返回 -1。

也就是说,如果 find() 的返回值不等于 -1,那就表示字符串包含了指定子串。

语法:

string.find(sub, start=0, end=len(string))

说明:

find() 方法接收以下 3 个参数。

  • sub(必选):表示要查找的子串。
  • start(可选,默认值:0):表示查找的开始下标。
  • end(可选,默认值:字符串长度):表示查找的结束下标。

如果 sub 参数为空字符串,则返回 start 的值。如果 start 未指定,则返回 0。

提示:

  • find() 会严格区分大小写。
  • find() 是 “从左到右” 查询,它获取的是子串 “第一次” 出现的下标。而 rfind() 是 “从右到左” 查询,它获取的是 “最后一次” 出现的下标。

Python find() 摘要

使用频率
修改原字符串
官方文档 查看
相关方法 index()rindex()rfind()

Python find() 示例

接下来,我们通过几个简单的例子来讲解 Python find() 方法是如何使用的。

示例 1:find() 不带 start 和 end

s = '红橙黄绿红橙'
print(s.find('红'))
print(s.find('蓝'))

运行结果如下。

0
-1

分析:

对于 s.find('红') 来说,虽然 s 中包含 2 个 “红”,但是只会返回第一次出现的下标,也就是 0。

对于 s.find('蓝') 来说,s 中并不包含 “蓝”,因此返回 -1。

示例 2:find() 带 start 和 end

s = '红橙黄绿红橙'
print(s.find('红'))
print(s.find('红', 2, 5))

运行结果如下。

0
4

分析:

虽然 s 中包含 2 个 “红”,但由于 s.find('红', 2, 5) 限定其查找范围为 s[2:5),因此它返回的是第 2 个 “红” 对应的下标。

示例 3:find() 严格区分大小写

s = 'Python is awesome'
print(s.find('Python'))
print(s.find('python'))

运行结果如下。

0
-1

分析:

find() 会严格区分大小写,由于字符串存在 'Python',因此 s.find('Python') 返回 0(该字符串开始的下标)。然后字符串不存在 'python',因此 s.find('python') 返回 -1。

示例 4:find() 查找空字符串

s = 'hello'
print(s.find(''))
print(s.find('', 3))

运行结果如下。

0
3

分析:

空字符串可匹配任何位置。对于 find() 方法来说,如果未指定 start,则默认返回 0;若指定 start,则返回 start 的值。

示例 5:find() 的 start 或 end 超出字符串长度

s = 'Python'
print(s.find('n', 0, 100))
print(s.find('Py', 10, 20))

运行结果如下。

5
-1

分析:

对于 find() 方法来说,如果 end 超出字符串长度,实际范围截断到末尾,因此 s.find('n', 0, 100) 能够成功匹配。如果 start 超出长度,则在该范围必然无法找到指定子串,因此返回 -1。

find() 和 index() 的区别

find() 和 index() 这 2 个方法非常相似,都可以获取某个子字符串在字符串中出现的位置。但两者也有细微的区别:当子串不存在时,find() 不会报错,而是返回 -1。而 index() 会报错,并且影响程序的正常执行。

find() vs index()
方法 返回值 子串不存在时 适用场景
find() 子串下标或 -1 返回 -1 需要静默处理子串不存在
index() 子串下标 抛出 ValueError 需要严格处理子串存在

示例 6:子串不存在时使用 find()

s = 'Python is awesome'
result = s.find('Java')
print(result)

运行结果如下。

-1

示例 7:子串不存在时使用 index()

s = 'Python is awesome'
result = s.index('Java')
print(result)

运行结果如下。

(报错)ValueError: substring not found

分析:

实际上,判断一个字符串是否包含另一个字符串,还有更简单的方式:使用 in 运算符,请看下面例子。

示例 8:子串不存在时使用 in

s = 'Python is awesome'
result = 'Java' in s
print(result)

运行结果如下。

False

上一篇: rindex()

下一篇: rfind()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号