Python中的RE - lastindex属性

2 投票
2 回答
3147 浏览
提问于 2025-04-17 22:52

我正在写一个关于Python中“高级”正则表达式的教程,但我有些地方不太明白。

lastindex

这个属性为什么在给出的例子中总是显示为1呢?你可以查看这个链接了解更多信息:http://docs.python.org/2/library/re.html#re.MatchObject.lastindex

我指的是这个例子:

re.match('((ab))', 'ab').lastindex

为什么它是1呢?第二组也在匹配啊。

2 个回答

1

在正则表达式中,使用 () 来捕获分组。在 Python 的 re 模块中,lastindex 用来表示最后一个捕获的分组。

我们来看一个简单的代码示例:

match = re.search("(\w+).+?(\d+).+?(\W+)", "input 123 ---")
if match:
    print match.lastindex

在这个例子中,输出结果会是 3,因为我在正则表达式中用了三个 (),并且它们都匹配到了。

对于上面的代码,如果你在 if 语句块中执行以下这一行,它会输出 123,因为这是第二个捕获的分组。

print match.group(2)
3

lastindex 是指最后一个匹配的组的索引。文档中的例子包括一个使用了两个捕获组的情况:

(a)(b)

在这个例子中,lastindex 被设置为 2,因为最后一个匹配的捕获组是 (b)

这个属性在你有可选的捕获组时特别有用;我们来对比一下:

>>> re.match('(required)( optional)?', 'required').lastindex
1
>>> re.match('(required)( optional)?', 'required optional').lastindex
2

当你有 嵌套 组时,外层组是最后一个匹配的。所以像 ((ab))((a)(b)) 这样的情况,外层组是组 1,并且是最后一个匹配的。

撰写回答