C#正则表达式提取含嵌套结构键值对的实现问题求助
正则修改方案
你可以使用如下正则实现预期的键值对提取:
"(?<key>\w+)"=(?<value>(?:{[^}]*}|"[^"]*"|[^,]+))
匹配逻辑说明
- key分组保持原有逻辑,匹配双引号包裹的键名
- value分组通过多分支规则实现不同类型值的完整匹配:
- 分支1
{[^}]*}:匹配被大括号包裹的所有内容,自动跳过大括号内部的逗号,不会提前截断 - 分支2
"[^"]*":匹配被双引号包裹的字符串,避免字符串内部的逗号被误识别为键值对分隔符 - 分支3
[^,]+:匹配非大括号、非引号包裹的普通值(如数字),直到遇到下一个分隔逗号为止
- 分支1
原正则错误原因
你之前使用的{?"?[^,]*"?}?逻辑未对大括号场景做特殊处理,只要扫描到逗号就会终止value的匹配,因此大括号内部的逗号会被误判为键值对分隔符,导致key3的value被拆分、subkey2被识别为新键的错误结果。
扩展适配说明
如果你的数据存在大括号嵌套的情况,需要使用支持递归匹配的正则引擎(如PCRE2),将大括号匹配分支替换为{(?R)*[^}]*}即可支持多层嵌套大括号的提取场景。
内容的提问来源于stack exchange,提问作者Lovetakingphoto
相关产品推荐
相关产品推荐

