Python Re Module如何在这个例子中工作?

时间:2013-05-05 07:15:28

标签: python regex

匹配此正则表达式的过程是什么?我不明白为什么显式组是'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',)

感谢。

2 个答案:

答案 0 :(得分: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。匹配组将始终是字符串开头的第一个匹配字符。

答案 1 :(得分:3)

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

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

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

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

在第三个示例中,正则表达式正在搜索一个字符,即a,b或c。由于a是abc中的第一个字符,因此您获得了a。如果我们更改字符串中的第一个字符,则会发生这种情况:

>>> re.match("([abc])", "cba").group()
'c'