regex Match.start(0)在Python中可以返回-1吗?

dluptydi  于 2023-01-31  发布在  Python
关注(0)|答案(1)|浏览(122)

我最近遇到了一个使用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的情况?

bkhjykvo

bkhjykvo1#

不,在您提到的场景中,Match.start(0)永远不会返回-1,因为必须存在匹配才能创建Match对象。匹配由整个匹配的子字符串(即组0)表示。如果找到匹配,则函数将始终具有有效的匹配子字符串,因此Match.start(0)将总是返回一个非负整数。因此,if match_offset == -1检查是多余的,可以安全地从代码中删除。

相关问题