我最近遇到了一个使用Python的re
库的代码块,它有一个令人困惑的健全性检查。
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()
的文档说如果指定的组存在但没有参与匹配,它将返回-1
。然而,文档还说指定零的组将引用整个匹配的子字符串。我想不出在没有匹配的子字符串的情况下存在匹配的场景,这使得-1
检查看起来是不必要的。
是否存在Match.start(0)
可能返回-1
的情况?
1条答案
按热度按时间bkhjykvo1#
不,在您提到的场景中,Match.start(0)永远不会返回-1,因为必须存在匹配才能创建Match对象。匹配由整个匹配的子字符串(即组0)表示。如果找到匹配,则函数将始终具有有效的匹配子字符串,因此Match.start(0)将总是返回一个非负整数。因此,if match_offset == -1检查是多余的,可以安全地从代码中删除。