我正在整理一个相当复杂的正则表达式.表达式的一部分匹配字符串,例如'+ 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',)
这是正则表达式应该如何表现?有没有办法做我想要的,而不必重复六次语法?
提前致谢!
安德鲁
我正在尝试为“用可选的多个空格或可选的单个逗号分隔的一位或两位数字序列”创建一个 python 正则表达式。
例如:
" 1" Should tests good
" 1 2 3 3 4 5 7 17" Should test good
" 1, 2,3,11,74" Should test good
"1,11,14, 15" Should test good
"111, 101" Should not test good
"1 2 3 a" Should not test good
"1, 25, 5.0 " Should not test good
"1,, 7, 80" Should not test good
"1,11,14," Should not test good
Run Code Online (Sandbox Code Playgroud)
逗号符号只能出现在数字(或空格)之间。这就是为什么最后一个例子测试不理想的原因。
我尝试过这个:
^\s*\d{1,2}(\s*\,?\d{1,2}\s*\,?)*\s*$
Run Code Online (Sandbox Code Playgroud)
但得到的结果并不好,例如“11111”就测试得很好。我应该如何编写我的正则表达式?