我想在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有所不同,但应该足够清楚。
答案 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中的有关命名捕获组的说明部分。