![两个正则表达式之间的区别:[abc] +和([abc])+,第1张 两个正则表达式之间的区别:[abc] +和([abc])+,第1张](/aiimages/%E4%B8%A4%E4%B8%AA%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB%EF%BC%9A%5Babc%5D+%2B%E5%92%8C%EF%BC%88%5Babc%5D%EF%BC%89%2B.png)
这里有两件事需要解释:量化组的行为和
findall()方法的设计。
在您的第一个示例中,
[abc]匹配
a在组#1中捕获的。然后,它匹配
b并捕获到#1组中,从而覆盖
a。然后再次使用
c,这就是比赛结束时第一组的比赛。
但是它 确实
匹配整个字符串。如果您正在使用
search()或者
finditer(),你就可以看MatchObject,看到
group(0)包含
abc与
group(1)包含
c。但是
findall()返回字符串,而不是MatchObjects。如果没有组,则返回所有匹配项的列表;如果有组,则列表包含所有捕获,但
不 包含整体匹配。
因此,您的两个正则表达式都与整个字符串匹配,但是第一个正则表达式也分别捕获并丢弃了每个字符(这毫无意义)。只是这出乎意料的行为
findall()使您看起来好像获得了不同的结果。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)