为什么 re.Match 反对 return 结束指数高于预期?

Why does re.Match object return an end index higher than expected?

我正在尝试了解 Python 中的正则表达式操作、字符串切片和字符串。

使用 .start() 和 .end() 进行字符串切片会产生预期的子字符串,如果我使用 .start() 从字符串中获取单个字符,则结果字符符合预期,但如果我去对于使用 .end() 索引的字符串中的单个字符,它不会产生预期的字符。

我知道列表(包括字符串)以元素零开头,但为什么此规则的例外是字符串切片的停止索引和重新匹配 .end() 索引?

>>> import re
>>> m = re.search("bake","123bake456")
>>> m
<re.Match object; span=(3, 7), match='bake'>
>>> m.span()
(3, 7)
>>> m.start()
3
>>> m.end()
7
>>> "123bake456"[m.start():m.end()]
'bake'
>>> "123bake456"[m.start()]
'b'
>>> "123bake456"[m.end()]
'4'

切片 结束索引,但 不包括 它。即 (3, 7)span 包括索引 6,但不包括 7。类似于 range(1,100) 会变成 1-99 但不包括 100。