Python中Match.start(0)是否存在返回-1的场景?
Python re库中Match.start(0)是否会返回-1?
import re def someFunctionName(pattern, string): for match in re.finditer(pattern, string): match_offset = match.start(0) if match_offset == -1: raise IndexError("Capture group offset was -1.")
这段代码里对match.start(0)做了-1的合理性检查,但根据Python官方文档,Match.start([group])仅在指定分组存在但未参与匹配时才会返回-1,而分组0指代的是整个匹配子串。既然re.finditer返回的是成功匹配的结果,实在想不出有什么场景会出现“匹配存在却无匹配子串”的情况,所以这个检查看起来多余。
结论:不存在任何场景会让Match.start(0)返回-1
原因很简单:re.finditer生成的每个Match对象,本身就代表一次成功的完整匹配。分组0是所有匹配的基础,必然对应原字符串中一段真实存在的子串,不可能出现“未参与匹配”的情况。因此match.start(0)只会返回非负的起始索引,永远不会是-1。
代码里的这个检查完全是多余的,大概率是开发者混淆了分组0和其他捕获分组的特性——比如对于带?的可选分组(如(abc)?),如果该分组没匹配到内容,调用start(1)才会返回-1,但分组0绝对不会有这种情况。
内容的提问来源于stack exchange,提问作者Stevoisiak
相关产品推荐
相关产品推荐

