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