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

问题描述:

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

在这个过于简单化的例子中,我基本上是试图分裂的字符串:

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

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

在此先感谢!
安德鲁

+1

我不这么认为。这些问题有re.findall和re.split。 – 2011-04-08 17:05:59

+0

[Python正则表达式多个组]的可能重复(http://*.com/questions/4963691/python-regex-multiple-groups) – outis 2011-12-28 02:57:27

+1

这里是关于捕获重复组的好文章。 http://www.regular-expressions.info/captureall.html示例:!abcabc123! 对于捕获所有abc和123都需要regex!((?:(abc)|(123))+)!.请注意额外的括号。 – b0bi 2015-11-28 08:17:08

你不能为此使用组,恐怕。每个组只能匹配一次,我相信所有正则表达式都是这样工作的。一个可能的解决方案是尝试使用findall()或类似的。

r=re.compile(r'\w') 
r.findall(x) 
# 'a', 'b', 'c', 'd', 'e', 'f' 
+1

笨蛋! *踢腿可以*为什么不能做到我想要的就是我想要的! - 谢谢! Andrew – 2011-04-08 17:57:17

+0

我一直在寻找命令,同时通过're.search'' re.match'和返回的're.MatchObject' – Sevenearths 2012-06-10 16:11:04

要查找给定字符串中的所有匹配,请使用re.findall(regex, string)。另外,如果你想在这里获得每一个字母,你的正则表达式应该是'(\w){1}'或只是'(\w)'

参见:

r = re.compile('(\w)') 
l = re.findall(r, x) 

l == ['a', 'b', 'c', 'd', 'e', 'f'] 

我想你的问题是你需要一个简单的介绍。

然后,我采取为例稍微复杂一些:

import re 

pat = re.compile('[UI][bd][ae]') 

ch = 'UbaUdeIbaIbeIdaIdeUdeUdaUdeUbeIda' 

print [mat.group() for mat in pat.finditer(ch)] 

结果

['Uba', 'Ude', 'Iba', 'Ibe', 'Ida', 'Ide', 'Ude', 'Uda', 'Ude', 'Ube', 'Ida'] 

regex模块可以做到这一点。

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

还与命名捕获的工作原理:

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

正则表达式模块有望取代“重”模块 - 这是一个简易替换,作用相同,不同的是它还有更多的功能和能力。