正则表达式组捕获多个匹配

And*_*fas 9 python regex

快速正则表达式问题.
我试图在python中捕获捕获组的多个实例(不要认为它是特定于python的),但后续捕获似乎覆盖了之前的捕获.

在这个过于简化的示例中,我实际上是在尝试拆分字符串:

x = 'abcdef'
r = re.compile('(\w){6}')
m = r.match(x)
m.groups()     # = ('f',) ?!?
我想得到('a', 'b', 'c', 'd', 'e', 'f'),但因为正则表达式覆盖了后续的捕获,我得到了('f',)

这是正则表达式应该如何表现?有没有办法做我想要的,而不必重复六次语法?

提前致谢!
安德鲁

sve*_*rre 14

我担心你不能使用群组.每个组只能匹配一次,我相信所有的正则表达式都是这样的.一种可能的解决方案是尝试使用findall()或类似方法.

r=re.compile(r'\w')
r.findall(x)
# 'a', 'b', 'c', 'd', 'e', 'f'
Run Code Online (Sandbox Code Playgroud)


rjh*_*rjh 6

正则表达式模块可以做到这一点。

> m = regex.match('(\w){6}', "abcdef")
> m.captures(1)
['a', 'b', 'c', 'd', 'e', 'f']
Run Code Online (Sandbox Code Playgroud)

也适用于命名捕获:

> m = regex.match('(?P<letter>)\w)', "abcdef")
> m.capturesdict()
{'letter': ['a', 'b', 'c', 'd', 'e', 'f']}
Run Code Online (Sandbox Code Playgroud)

regex 模块有望取代“re”模块——它是一个替代品,作用相同,只是它具有更多的特性和功能。