我希望这行JavaScript:
"foo bar baz".match(/^(\s*\w+)+$/)
Run Code Online (Sandbox Code Playgroud)
返回类似的东西:
["foo bar baz", "foo", " bar", " baz"]
Run Code Online (Sandbox Code Playgroud)
但它只返回最后捕获的匹配:
["foo bar baz", " baz"]
Run Code Online (Sandbox Code Playgroud)
有没有办法获得所有捕获的匹配?
我正在整理一个相当复杂的正则表达式.表达式的一部分匹配字符串,例如'+ 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解析日志,需要从中快速获取一些值
这是简单的等效正则表达式和用法示例
pat = re.compile("(1(2[3456]+2)+1)*")
Run Code Online (Sandbox Code Playgroud)
它没有按预期工作,只有pat.match()返回最后一个匹配组.groups()
这类问题最简单的解决方案是什么?
更新(因为维基引擎说使用编辑而不是创建新帖子):
当然,我需要重复比赛.
to_match="1232112542254211232112322421"
Run Code Online (Sandbox Code Playgroud)
正则表达式需要递归地应用两次.我能忍受,但有什么选择吗?
我正在尝试匹配字符串中的一对数字并将其捕获成组,但我似乎只能捕获最后一组.
Regex:
(\d\d){1,3}
Run Code Online (Sandbox Code Playgroud)
输入字符串:123456 789101
比赛1:123456
第1组:56
第2场比赛:789101
第1组:01
我要的是捕捉到所有的组是这样的:第1场:123456
1组:12
组2:34
组3:56
*更新
看起来Python不允许你捕获多个组,例如在.NET中你可以在一次传递中捕获所有组,因此re.findall('\ d\d','123456')完成这项工作.