Python正则表达式疑问:为何分组捕获结果为'c'?
为啥你的正则分组捕获到的是'c'?
嘿,我来给你把这个事儿说透!你写的正则([abc])+里藏着一个很容易踩的小坑,咱们一步步拆解:
- 首先看正则结构:
([abc])是一个捕获组,匹配a、b、c里的任意单个字符;后面的+表示这个捕获组要重复匹配1次或多次。 - 当匹配字符串"abc"时,这个捕获组会依次工作:
- 第一次匹配到'a',此时捕获组1的内容是'a';
- 第二次匹配到'b',这时候捕获组1的内容会被覆盖成'b';
- 第三次匹配到'c',捕获组1的内容又被覆盖成'c'。
- 正则引擎的规则就是这样:当捕获组被重复修饰符(比如
+、*、{n,})作用时,捕获组只会保留最后一次匹配的结果,前面的都会被覆盖掉。
所以最后m.groups()返回('c',),m.group(1)拿到'c'就完全说得通啦。
如果想把所有匹配的字符都捕获到,其实可以换个写法,比如用re.findall("[abc]", "abc"),它会返回['a', 'b', 'c'],直接拿到所有符合条件的字符~
内容的提问来源于stack exchange,提问作者setu shwetank
相关产品推荐
相关产品推荐

