"([abc])+" re默认是贪婪模式。这个正则可以理解为,a or b or c 出现一次或者多次都是成功。
"([abc])?" 使用表示非贪婪,这个正则可以理解为,a or b or c 出现零次或者一次都是成功。
去匹配“abc”是 贪婪尽可能的在成功的情况下,多匹配。所以它匹配是 a b c 都是成功的,但是总体它是一次匹配,一次尽可能多得的匹配,所以到c没有了
非贪婪尽可能在成功的情况下,少匹配,这里它匹配是 a b c 都是成功的,这个是成功了三次,a,b,c都会作为结果集。
- m = re.match("([abc])+", "abc")
复制代码
group() = group(0) = 正则表达式整体结果,因为是贪婪模式,所有abc被匹配成功。
group(1) = 分组的第一组,你匹配式只有一个组,就是一个括号,所以返回 ‘c’ 并不会返回 ‘a’,在注意下结果
=============================================
跟上面例子有什么区别?为什么这里不是返回'456'?
没有区别
group() = group(0) = 正则表达式整体结果, "123abc456"均匹配成功
group(1) = 分组的第一组,这里有三组,第一组就是 123
"(?:[abc])+" ?: 是组合使用,类似(...),表示它不是一个元祖,匹配是成功的,用group()可以看到,返回的结果是,abc。不过groups返回的都是元祖,所有没有输出