Python 字符串 rfind() 方法

Python rfind() 语法

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

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

语法:

string.rfind(sub, start, end)

说明:

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

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

如果 sub 参数为空字符串且未指定 end,则默认返回字符串长度;如果指定了 start 和 end,则返回 end 的值。

提示:

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

Python rfind() 摘要

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

Python rfind() 示例

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

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

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

运行结果如下。

4
-1

分析:

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

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

示例 2:rfind() 带 start 和 end

s = '红橙黄绿红橙'
print(s.rfind('红'))
print(s.rfind('红', 0, 3))

运行结果如下。

4
0

分析:

对于 s.rfind('红', 0, 3) 来说,它限定其查找范围为 s[0:3)(即前 3 个元素 '红橙黄')。

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

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

运行结果如下。

0
-1

分析:

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

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

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

运行结果如下。

5
5

分析:

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

示例 5:start 或 end 超出字符串长度

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

运行结果如下。

5
-1

分析:

对于 rfind() 方法来说,若 end 超出字符串长度,实际范围截断到末尾,因此第一个示例成功匹配。若 start 超出长度,则在该范围必然无法找到指定子串,因此返回 -1。

rfind() 和 rindex() 的区别

rfind() 方法和 rindex() 方法非常相似,都可以获取子串 “最后一次” 出现的下标。但是两者也有细微的区别:当子串不存在时,rfind() 不会报错,而是返回 -1。而 rindex() 会报错,并且影响程序的正常执行。

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

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

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

运行结果如下。

-1

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

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

运行结果如下。

(报错)ValueError: substring not found

上一篇: find()

下一篇: isupper()

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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