在这个正则表达式中findall和match之间混淆

时间:2016-12-01 16:58:49

标签: python regex expression grouping findall

我是学习RE的新手。以下是python代码片段:

>>>m = re.match("([abc])+", "abc")
>>> m.group()
'abc'    ..........(1)
>>> m.groups()
('c',)    .........(2)
>>> m = re.findall("([abc])+", "abc")
>>> m
['c']    ..........(3)

根据我的理解,m.group()忽略任何括号的存在,因此像re.match(“[abc] +”,“abc”)一样工作。这种方式(1)对我有意义。

请解释(2)和(3)。 是否在(2)中,同一个子组一直被覆盖,因为由于存在单个括号,因此只能有一个子组?

1 个答案:

答案 0 :(得分:2)

当您连续捕获群组时,正则表达式引擎仅记住最后一个群组。因此它与abc匹配,但仅记住c。您应该改为做

([abc]+)

参见演示。

https://regex101.com/r/TaYp4J/1

对于(3),当正则表达式中存在组时,findall仅返回组。因此,它将仅返回c,因为它是最后一个连续组。