键值匹配组正则表达式,其中分隔符也可以包含在引号括起来的值中

Key Value Match Group Regex where Delimiters can also be contained in quote-enclosed values

我的任务是针对 key/value 对格式数据集创建正则表达式。正则表达式必须包含两个匹配组,一个用于键,一个用于值。

key/value 对以逗号分隔。我挣扎的地方是,值(即键=)可以包含逗号。在这种情况下,值用引号引起来或 'text-qualified'.

我无法控制数据的格式。

我很接近,但我的正则表达式在包含逗号的引号括起来的值的情况下失败。

这是我尝试过的方法 (https://regex101.com/r/jkK1fT/2):

([^=]*)=\"?([A-Za-z\d:\-\s\.]*)\"?,

下面是一些示例行:

Date=2017-06-29 03:10:00.850 -700 PDT,host=superrad.host,fooVals="12.0,18.0,24.0,36.0,48.0,54.0",origin_ip="FOO: [33.77.254.23]:39562->[222.11.110.111]",foo=bar
Date=2017-06-11 02:30:03.823 -900 PDT,host=superrad.host,fooVals="0.0,22.0,24.0,3.0,4.0,54.0",origin_ip="FOO: [33.77.254.23]:39562->[333.11.22.28]",foo=baz

如何完成我的正则表达式,以便第二个捕获组('values' 的捕获组)可以提取可选引用的封闭文本,尤其是当它包含逗号时,在本例中是我的分隔符?

满足了我的需求,感谢各位花时间看一看

([^=]*)=[\"\s]?([^\"=]*)[\"]?,

这个怎么样?

([\w_]+)=\"(.+?)\"|([\w:\- \.]+)
  • ([\w_]+) 检索密钥。
  • \"(.+?)\" 检索由 ".
  • 括起来的值
  • [\w:\-\s\.]+ 检索除 "
  • 括起来的值以外的值
  • \s不仅包含space,还包含换行符。所以我用 </code> 而不是 <code>\s.

https://regex101.com/r/4jsmYp/2

如果你想为你的数据分隔每一行,你也可以使用([\w_]+)=\"(.+?)\"|[\w:\-\s\.\[\]>]+