Python中的RE - lastindex属性
我正在写一个关于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,并且是最后一个匹配的。