首页 > 解决方案 > 如何在 C++ 中使用正则表达式解析键值对

问题描述

我有一些具有这种格式的字符串:

    aaaaaaaaaaaa  //first line
    [key = [metadata = 1 metadata = 2 metadata =3] KEY(1) = 100 
KEY(2) = 16:30:00 KEY(3) = 2020-12-12 08:30:30 KEY(4) = 0]

我想以 Json 格式获取键值对,例如 {"KEY(1)":"100", "KEY(2)":"16:30:00", "KEY(3)":"2020-12-12 08:30:30", "KEY(4)":"0"}

我有点难以处理最后一部分,因为值中也可能有空格2020-12-12 08:30:30,所以我能想到的唯一方法是找到“=”,即第一个空格和第二个空格之间的数据left 是当前键,所有其余的 util 前一个“=”是前一个键的值,这很棘手,我是 REGEX 的新手,我应该怎么做?谢谢!

标签: c++regex

解决方案


我不会尝试使用正则表达式来做到这一点。

有你还没有考虑到的困难。例如,带引号的字符串可以包含一个=,或者(更糟糕的是)它可以包含一个引号,所以这样的事情是不寻常的,但似乎是合法的:

{ "\"key\"=\"value\"" = "This is the value"}

完成解析后,这种情况下的键将是"key" = "value"(在字符串中包含引号和等号。

因此,您不仅需要识别所处理内容的每个部分的开头和结尾,而且在某些情况下,您还需要对其进行一些转换以获得正确的字符串。

现在,我不会说这不能使用正则表达式来完成——但我认为(充其量)开发一个能够正常工作的正则表达式将比它的价值更麻烦。


推荐阅读