Python rindex() 语法
rindex() 是 Python 字符串的一个方法,它用于获取子串 “最后一次” 出现的下标。
语法:
str.rindex(sub, start=0, end=len(str))说明:
rindex() 方法接收以下 3 个参数。
sub(必选):你要查找的子串start(可选,默认值:0):表示查找的开始下标(包含)。end(可选,默认值:字符串长度):表示查找的结束下标(不包含)。
str.rindex(sub, start, end) 表示在 str[start:end] 中查找 sub 这个子串。
如果查找的 sub 子串不在指定的搜索范围内,则 rindex() 方法会引发 ValueError 异常。因此在调用 rindex() 之前,建议小伙伴们先使用 in 运算符或 find() 方法判断元素是否存在,从而避免引发异常。
如果查找的 sub 子串是空字符串,则返回 end 的值。
提示:
- rindex() 会严格区分大小写。
- rindex() 方法是获取子串 “最后一次” 出现的下标,而 index() 方法是获取子串 “第一次” 出现的下标。
Python rindex() 摘要
| 使用频率 | 中 |
|---|---|
| 修改原字符串 | 否 |
| 官方文档 | 查看 |
| 相关方法 | index()、find()、rfind() |
Python rindex() 示例
接下来,我们通过几个简单的例子来讲解 Python rindex() 方法是如何使用的。
示例 1:包含子串时使用 rindex()
s = '红橙黄绿红橙'
print(s.rindex('红'))运行结果如下。
4分析:
对于 s.rindex('红') 来说,虽然 s 中包含 2 个 “红”,但只会返回最后一次出现的下标,也就是 4。
示例 2:不包含子串时使用 rindex()
s = '红橙黄绿红橙'
print(s.rindex('蓝'))运行结果如下。
(报错)ValueError: substring not found分析:
对于 s.rindex('蓝') 来说,s 中并不包含 “蓝”,因此会报错。
示例 3:rindex() 严格区分大小写
s = 'Python is awesome'
print(s.rindex('Python'))
print(s.rindex('python'))运行结果如下。
0
(报错)ValueError: substring not found示例 4:rindex() 查找空字符串
s = 'hello'
print(s.rindex(''))
print(s.rindex('', 2))运行结果如下。
5
5分析:
空字符串可匹配任何位置。对于 rindex() 方法来说,如果未指定 end,则默认返回字符串长度;如果指定 start,则返回 end 的值(默认为字符串长度)。
示例 5:rindex() 的 start 或 end 超出字符串长度
s = 'Python'
print(s.rindex('n', 0, 100))
print(s.rindex('', 10, 20))运行结果如下。
5
(报错)ValueError: substring not found分析:
对于 rindex() 方法来说,如果 end 超出字符串长度,实际范围截断到末尾,因此 s.rindex('n', 0, 100) 能匹配 'n'。但如果 start 超出长度,则必然在该范围内无法找到指定子串,因此会抛出 ValueError 异常。
rindex() 和 rfind() 的区别
rindex() 和 rfind() 这 2 个方法非常相似,都可以获取子串 “最后一次” 出现的下标。但两者也有细微的区别:当子串不存在时, rindex() 会报错,并且影响程序的正常执行。但 rfind() 不会报错,而是返回 -1。
| 方法 | 返回值 | 子串不存在时 | 适用场景 |
|---|---|---|---|
| rindex() | 子串下标 | 抛出 ValueError | 需要严格处理子串存在 |
| rfind() | 子串下标或 -1 | 返回 -1 | 需要静默处理子串不存在 |
示例 6:子串不存在时使用 rindex()
s = 'Python is awesome'
result = s.rindex('Java')
print(result)运行结果如下。
(报错) ValueError: substring not found示例 7:子串不存在时使用 rfind()
s = 'Python is awesome'
result = s.rfind('Java')
print(result)运行结果如下。
-1