【发布时间】:2021-11-04 21:10:04
【问题描述】:
我找到了一些正则表达式来提取键值样式格式
但最近我遇到了一些类似下面的格式
"Key1"=123,"Key2"="abc","key3"={"subkey1"=12,"subkey2"="cd"},"key4"=456
这是我想要输出的内容
| match | Key | value |
|---|---|---|
| match0 | Key1 | 123 |
| match1 | Key2 | "abc" |
| match2 | key3 | {"subkey1"=12,"subkey2"="cd"} |
| match3 | key4 | 456 |
我怎样才能逃避 {} 中的“,”
我试过了
"(?<key>\w+)"=(?<value>{?"?[^,]*"?}?)
但是 结果是这样的
| match | Key | value |
|---|---|---|
| match0 | Key1 | 123 |
| match1 | Key2 | "abc" |
| match2 | key3 | {"subkey1"=12 |
| match3 | subkey2 | "cd"} |
| match4 | key4 | 456 |
只有当 {} 中的 "," 时才能转义?
【问题讨论】:
-
有很多问题讨论如何使用正则表达式解析任意嵌套结构...包括the most famous one。您期望嵌套结构更容易的任何特殊原因?请edit 澄清是什么使您的案例适合正则表达式解析的问题。
-
我对正则表达式的个人指导方针:不要使用它们 - 除非 a) 实现很简单或 b) 你绝对有 到。我怀疑你会为你想要实现的目标找到一个简单且可维护的解决方案。尝试构建解析器。如果他们可以给你一些指示 - 甚至是现成的方法,也许可以与创建输出的人交谈。毕竟,它基本上看起来像 JSON,除了
=替换:(并且缺少周围的括号) -
感谢两位推荐,是的,也许应该尝试构建一个解析器而不是使用正则表达式。
-
@Lovetakingphoto 请注意,如果您想实现 json 方法 - 您需要考虑
=存在于字符串值内的可能性,尽管编写简单的解析器将替换所有=不在引号内比写一个成熟的更容易。