这里有两件事需要解释:量化组的行为和
findall()方法的设计。
在您的第一个示例中,
[abc]匹配
a在组#1中捕获的。然后,它匹配
b并捕获到#1组中,从而覆盖
a。然后再次使用
c,这就是比赛结束时第一组的比赛。
但是它 确实
匹配整个字符串。如果您正在使用
search()或者
finditer(),你就可以看MatchObject,看到
group(0)包含
abc与
group(1)包含
c。但是
findall()返回字符串,而不是MatchObjects。如果没有组,则返回所有匹配项的列表;如果有组,则列表包含所有捕获,但
不 包含整体匹配。
因此,您的两个正则表达式都与整个字符串匹配,但是第一个正则表达式也分别捕获并丢弃了每个字符(这毫无意义)。只是这出乎意料的行为
findall()使您看起来好像获得了不同的结果。


![两个正则表达式之间的区别:[abc] +和([abc])+ 两个正则表达式之间的区别:[abc] +和([abc])+](http://www.mshxw.com/aiimages/31/641408.png)
