我需要对数据进行一些转换以实现数据加载的兼容性。嵌套的键值对需要被展开,并且它们的组ID需要在每个子数据的前面加上。
我一直在努力理解这个页面:重复捕获组与捕获重复组,但似乎无法理解。
到目前为止,我的表达式是:
"(?'group'[\w]+)": {\n((\s*"(?'key'[^"]+)": "(?'value'[^"]+)"(?:,\n)?)+)\n},?
工作示例:https://regex101.com/r/Wobej7/1
我知道使用一个或多个中间步骤会简化这个过程,但现在我想知道是否可能。
源数据示例:
"g1": {
"k1": "v1",
"k2": "v2",
"k3": "v3"
},
"g2": {
"k4": "v4",
"k5": "v5",
"k6": "v6"
},
"g3": {
"k7": "v7",
"k8": "v8",
"k9": "v9"
}
期望的转变:
{"g1","k1","v1"},
{"g1","k2","v2"},
{"g1","k3","v3"},
{"g2","k4","v4"},
{"g2","k5","v5"},
{"g2","k6","v6"},
{"g3","k7","v7"},
{"g3","k8","v8"},
{"g3","k9","v9"}
^("(\w+)":\h*{\h*)(?:\R\h+"(\w+)":\h*"(\w+)",?|\s*\}(?:,\R)?)
并替换为(?{3}\{"$2","$3","$4"\},\n$1:)
,但你需要点击Replace all多次。 - Wiktor Stribiżew