多个匹配的正则表达式组捕获
快速正则表达式问题。
我试图在python中捕获捕获组的多个实例(不要认为它是python特定的),但后续捕获似乎覆盖了以前。多个匹配的正则表达式组捕获
在这个过于简单化的例子中,我基本上是试图分裂的字符串:
x = 'abcdef' r = re.compile('(\w){6}') m = r.match(x) m.groups() # = ('f',) ?!?我想
('a', 'b', 'c', 'd', 'e', 'f')
,但由于正则表达式覆盖随后的捕捉,我得到
('f',)
这究竟是怎么正则表达式应该表现得如何?有没有办法做我想要的,而不必重复六次语法?
在此先感谢!
安德鲁
你不能为此使用组,恐怕。每个组只能匹配一次,我相信所有正则表达式都是这样工作的。一个可能的解决方案是尝试使用findall()或类似的。
r=re.compile(r'\w')
r.findall(x)
# 'a', 'b', 'c', 'd', 'e', 'f'
笨蛋! *踢腿可以*为什么不能做到我想要的就是我想要的! - 谢谢! Andrew – 2011-04-08 17:57:17
我一直在寻找命令,同时通过'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']}
正则表达式模块有望取代“重”模块 - 这是一个简易替换,作用相同,不同的是它还有更多的功能和能力。
我不这么认为。这些问题有re.findall和re.split。 – 2011-04-08 17:05:59
[Python正则表达式多个组]的可能重复(http://*.com/questions/4963691/python-regex-multiple-groups) – outis 2011-12-28 02:57:27
这里是关于捕获重复组的好文章。 http://www.regular-expressions.info/captureall.html示例:!abcabc123! 对于捕获所有abc和123都需要regex!((?:(abc)|(123))+)!.请注意额外的括号。 – b0bi 2015-11-28 08:17:08