4

匹配这个正则表达式的过程是什么?我不明白为什么显式组是“c”。这是一段代码取自 Python Re Module Doc。

>>> m = re.match("([abc])+", "abc")
>>> m.group()
'abc'
>>> m.groups()
('c',)

另外,关于:

>>> m = re.match("([abc]+)", "abc")
>>> m.group()
'abc'
>>> m.groups()
('abc',)

和:

>>> m = re.match("([abc])", "abc")
>>> m.group()
'a'
>>> m.groups()
('a',)

谢谢。

4

2 回答 2

6
re.match("([abc])+", "abc")

匹配由 a、b 或 c 组成的组。最后的组是在字符类中找到的最后一个字符,因为匹配是贪婪的,所以最后一个匹配的字符是c.

m = re.match("([abc]+)", "abc")

匹配包含一个或多个连续出现的 a、b 或 c 的组。最后的匹配组是 a、b 或 c 的最大连续组。

re.match("([abc])", "abc")

匹配 a、b 或 c。匹配组将始终是字符串开头的第一个匹配字符。

于 2013-05-05T07:22:17.750 回答
3

在您的第一个示例中,([abc])+为它找到的每个 a、b 或 c 字符创建一个组。c 是显式组,因为它是正则表达式匹配的最后一个字符:

>>> re.match("([abc])+", "abca").groups()
('a',)

在您的第二个示例中,您正在创建一个与连续的一个或多个 a、b 或 c 匹配的组。因此,您为abc. 如果我们扩展abc,该组将使用字符串扩展:

>>> re.match("([abc]+)", "abca").groups()
('abca',)

在您的第三个示例中,正则表达式正在搜索一个字符,即 a、ab 或 c。因为 a 是 中的第一个字符abc,所以你得到一个 a。如果我们更改字符串中的第一个字符,情况就会改变:

>>> re.match("([abc])", "cba").group()
'c'
于 2013-05-05T07:22:14.563 回答