【发布时间】:2016-03-16 17:58:09
【问题描述】:
我正在尝试使用匹配重复与捕获组来捕获递归序列。
这是一个示例文本:
some_string_here 00 12.34 34 56.78 78.90
用于捕获所有浮点值的正则表达式:
\S+(?:\s+(\d+(?:\.\d+)?)){5}
正则表达式按预期匹配所有浮点值,但捕获组仅返回最终匹配结果。
Group #1: 78.90
要求的结果是:
Group #1: 00
Group #2: 12.34
Group #3: 34
Group #4: 56.78
Group #5: 78.90
如果我使用以下作为正则表达式,结果符合预期,但递归序列太多,正则表达式太长。
\S+(?:\s+(\d+(?:\.\d+)?))(?:\s+(\d+(?:\.\d+)?))(?:\s+(\d+(?:\.\d+)?))(?:\s+(\d+(?:\.\d+)?))(?:\s+(\d+(?:\.\d+)?))
有没有办法通过捕获组捕获匹配重复中的所有浮点值?
【问题讨论】:
-
“正则表达式太长”是什么意思?
-
这是 Perl 正则表达式的工作方式。只有一对括号只能有一次捕获。看起来你应该只使用
split -
@Akshay Belvadi 你的正则表达式重复
(?:\s+(\d+(?:\.\d+)?))6 次将是错误的some_string_here 00 12.34 34 56.78 78.90 78.90(7 个数字)/(?:\s+(\d+(?:\.\d+)?))/g也会起作用。