将重复的组捕获为不同的组

时间:2019-03-20 14:49:39

标签: python regex

我想在Python中捕获重复的组作为单独的列表:

match = re.match(r'!((?:abc|123)+)!', '!abc123abc!').groups()
print(match)
print(len(match))

这会返回具有单个元素的元组:

('abc123abc',)
1

如何获得以下输出?

('abc', '123', 'abc',)
3

this helpful article on capturing repeated groups之后,我现在了解了我先前遇到的问题,尝试重复捕获组而不是捕获重复组。但是我仍然不知道如何捕获或捕获不同的组以进行更好的后处理。

请注意,我不能没有前置/后缀,因为它还包含多个捕获组。我的实际用例与此MWE有所不同,但应该足够清楚。

1 个答案:

答案 0 :(得分:0)

这类似于@WiktorStribiżew的正确答案,同时更容易与我的原始问题进行比较

import regex as re
match = re.match(r'!(abc|123)+!', '!abc123abc!').captures(1)
print(match)
print(len(match))

正确输出的

['abc', '123', 'abc']
3

之所以可行,是因为regex模块(不要与Python内部的re模块混淆)在使用capture()方法时以不同的方式处理组,即不覆盖它们(如我最初提出的问题中的文章),而是附加它们,而不是覆盖索引。 regex package's official documentation中的有关命名捕获组的说明部分。