我是学习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)中,同一个子组一直被覆盖,因为由于存在单个括号,因此只能有一个子组?
答案 0 :(得分:2)
当您连续捕获群组时,正则表达式引擎仅记住最后一个群组。因此它与a
,b
和c
匹配,但仅记住c
。您应该改为做
([abc]+)
参见演示。
https://regex101.com/r/TaYp4J/1
对于(3),当正则表达式中存在组时,findall仅返回组。因此,它将仅返回c
,因为它是最后一个连续组。