为什么此正则表达式打印('c',)
和()
?
我想"([abc])+" === "([abc])([abc])([abc])..."
>>> import re
>>> m = re.match("([abc])+", "abc")
>>> print m.groups()
('c',)
>>> m.groups(0)
('c',)
>>> m = re.match("[abc]+", "abc")
>>> m.groups()
()
>>> m.groups(0)
()
答案 0 :(得分:1)
有关 groups
的文档返回一个包含匹配的所有子组的元组,从1到多个组都在模式中。默认参数用于未参与匹配的组;它默认为无。
在第一个正则表达式([abc])+
中,它匹配字符a
或b
或c
,但只存储最后一个匹配
([abc])+
<----->
Matches a or b or c
Observe carefully. Capturing groups are surrounding only the character class
So, only one character from the matched character class can be stored in capturing group.
如果要在捕获组中捕获字符串abc
,请使用
([abc]+)
上面会找到由
a
或b
或c
组成的字符串,并将其存储在捕获组中。
在第二个正则表达式[abc]+
中,没有捕获组,因此显示空结果。
答案 1 :(得分:0)
当您在括号后加上加号时,您一次匹配一个字符,多次。所以它匹配a然后b然后c,每次都覆盖前一个。移动+内部([abc] +)以匹配一个或多个。