我正在整理一个相当复杂的正则表达式.表达式的一部分匹配字符串,例如'+ a',' - 57'等.A +或a - 后跟任意数量的字母或数字.我想匹配匹配此模式的0个或更多字符串.
这是我提出的表达方式:
([\+-][a-zA-Z0-9]+)*
Run Code Online (Sandbox Code Playgroud)
如果我使用这种模式搜索字符串'-56 + a',我希望得到两个匹配:
+ a和-56
但是,我只返回了最后一场比赛:
>>> m = re.match("([\+-][a-zA-Z0-9]+)*", '-56+a')
>>> m.groups()
('+a',)
Run Code Online (Sandbox Code Playgroud)
看看python文档,我看到:
如果一个组匹配多次,则只能访问最后一个匹配:
Run Code Online (Sandbox Code Playgroud)>>> m = re.match(r"(..)+", "a1b2c3") # Matches 3 times. >>> m.group(1) # Returns only the last match. 'c3'
所以,我的问题是:如何做您可以访问多个小组赛?
我很困惑在Python中返回多个组.我的RegEx是这样的:
lun_q = 'Lun:\s*(\d+\s?)*'
Run Code Online (Sandbox Code Playgroud)
我的字符串是
s = '''Lun: 0 1 2 3 295 296 297 298'''`
Run Code Online (Sandbox Code Playgroud)
我返回一个匹配的对象,然后想要查看这些组,但它显示的是最后一个数字(258):
r.groups()
(u'298',)
Run Code Online (Sandbox Code Playgroud)
为什么不回归0,1,2,3,4等等?
快速正则表达式问题.
我试图在python中捕获捕获组的多个实例(不要认为它是特定于python的),但后续捕获似乎覆盖了之前的捕获.
在这个过于简化的示例中,我实际上是在尝试拆分字符串:
x = 'abcdef'
r = re.compile('(\w){6}')
m = r.match(x)
m.groups() # = ('f',) ?!?
我想得到('a', 'b', 'c', 'd', 'e', 'f'),但因为正则表达式覆盖了后续的捕获,我得到了('f',)
这是正则表达式应该如何表现?有没有办法做我想要的,而不必重复六次语法?
提前致谢!
安德鲁