快速正则表达式问题.
我试图在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)
在正则表达式模块可以做到这一点。
> 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”模块——它是一个替代品,作用相同,只是它具有更多的特性和功能。