小编Mic*_*ael的帖子

在Python中使用or运算符捕获组

我发现在Python 3.7.0中,当一个分支最初匹配但使用或运算符捕获组时会出现奇怪的行为,但是正则表达式最终必须回溯并使用另一个分支。在这种情况下,即使正则表达式使用第二个分支,捕获组仍会保留在第一个分支中。

示例代码:

regexString = "^(a)|(ab)$"

captureString = "ab"

match = re.match(regexString, captureString)

print(match.groups())
Run Code Online (Sandbox Code Playgroud)

输出:

('a', None)
Run Code Online (Sandbox Code Playgroud)

第二组是使用的组,但是第一组被捕获,而第二组没有被捕获。

有趣的是,我发现了一种解决方法,可以在两个组之间添加非捕获括号,如下所示:

regexString = "^(?:(a)|(ab))$"
Run Code Online (Sandbox Code Playgroud)

新输出:

(None, 'ab')
Run Code Online (Sandbox Code Playgroud)

在我看来,这种行为似乎是一个错误。如果不是这样,有人可以向我指出一些说明为什么发生这种情况的文档吗?谢谢!

python regex

4
推荐指数
1
解决办法
45
查看次数

标签 统计

python ×1

regex ×1