【发布时间】:2017-04-01 04:14:57
【问题描述】:
首先:Iknowthisquestionhasbeenbeatentodeath.
第二:我查看了过去几年我能想到的所有资源(在线编辑、RexEgg、regular-expressions.info 等...),但我仍然无法掌握这部分正则表达式。无论我使用什么正则表达式,它似乎都不适合我。
现在家务已经不碍事了:
我有大量文本需要从中提取一些我认为 Regex 非常适合的数据。
文字如下:
2017-03-31 09:41:18 EDT [12708-4] 参数:$1 = '0',$2 = 'ON',$3 = 'ON'
很明显,我想要$1、$2 和$3 的值。这个特殊的例子有 3 个变量,但通常在 1 到 15 之间。
我想要一个能够捕获以下内容的正则表达式:
- $1
- '0'
- $2
- '开'
- $3
- '开'
这是我的正则表达式,它匹配第一组:
\d{4}.+\[[\d-]*\].+?parameters:\s((\$\d+)\s?=\s?(['\d+\w+]+))
但是加号、括号和逗号的组合不会产生任何接近我想要的东西。即使我从字符串中删除逗号并将它们卡在一起,我也无法捕捉到它。
这家伙什么都捕捉到了,但是这些组没有意义:
\d{4}.+\[[\d-]*\].+?parameters:\s(((\$\d+)\s?=\s?(['\d+\w+]+),?\s?)+)
如果文本被我不关心的字符分隔,有人可以在这里结束我的痛苦并向我解释如何在正则表达式中捕获重复的文本吗?
【问题讨论】:
-
你可能想看看
\G在该位置匹配,上一场匹配结束。(?:\G(?!^),|parameters:)\s+(\$\d+) = '(\w+)'应该是您正在寻找的东西。 -
我也无法让那个工作。还是只抓到一个
-
尝试多个匹配/捕获 Sebastian 提及的一些修改模式:
(?:\G(?!^),|parameters:)\s*(\$\d+)\s*=\s*'([^']+)'\s*。它不会为您提供 6 个组,因为只能有与模式中定义的一样多的组。它将给出 3 个匹配 x 2 个组。如果这种方法不是您所需要的,那么您就无法使用纯正则表达式来获得它。编程语言是什么?