Python中re.MatchObject.span()方法返回的结束位置为何是实际结束+1?
re.MatchObject.span() 返回结束索引+1的原因
这是Python全语言统一遵循的左闭右开区间设计惯例,属于预期内的正常行为,并非方法实现错误。
该设计的合理性主要有三点:
- 方便直接用返回值做切片取匹配内容:示例中匹配到的字符串是
'457573',用返回的(0,6)直接做切片'457573'[0:6]就能完整取出匹配结果,如果返回的是(0,5),反而需要额外对结束索引+1才能拿到完整内容,增加不必要的运算。 - 方便直接计算匹配长度:结束索引减起始索引的结果刚好就是匹配内容的长度,示例中
6-0=6,刚好对应匹配字符串的6个字符,不需要额外做加减运算。 - 保持语言设计一致性:左闭右开是Python通用的区间规则,包括列表切片、
range()函数、字符串查找的区间返回等全部遵循该规则,re模块的设计和全局规则保持了统一,降低使用者的记忆成本。
你提供的测试代码运行逻辑如下:
import re match_object = re.match(r'(\d+)', '457573') print(match_object.span()) # 输出:(0, 6)
示例中匹配的字符串共6个字符,单个字符的索引依次是0到5,左闭右开区间[0,6)刚好覆盖全部6个字符,因此span()返回(0,6)完全符合设计预期。
内容的提问来源于stack exchange,提问作者Mubin Likhon
相关产品推荐
相关产品推荐

