我有一个Json字符串,我需要从在C#中使用Regex提取一些数据 字符串是这样的:
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": [
{
"arrayKey1": 1,
"arrayKey2": "something",
"arrayKey3": "somethingelse"
},
{
"arrayKey1": 2,
"arrayKey2": "something2",
"arrayKey3": "somethingelse2"
},
{
"arrayKey1": 3,
"arrayKey2": "something3",
"arrayKey3": "somethingelse3"
}
],
"some very long text here": ""
"anotherKey": "value",
"keylast": "valuelast"
}
我想使用命名组提取数组的值,我使用以下正则表达式进行了此操作:(?:"arrayKey1": (?<arrayKey1>[^"]+),[\n\t ]+"arrayKey2": "(?<arrayKey2>[^"]+)",[\n\t ]+"arrayKey3": "(?<arrayKey3>[^"]+)")
这很好用,我得到每个匹配项,每个匹配项都有3组键。
现在,我要添加一个仅包含“ anotherKey”值的额外匹配项 我无法上班,这是我尝试过但无法正常工作的一些正则表达式:
(?:"arrayKey1": (?<arrayKey1>[^"]+),[\n\t ]+"arrayKey2": "(?<arrayKey2>[^"]+)",[\n\t ]+"arrayKey3": "(?<arrayKey3>[^"]+)")(?:[\s\S]*)(?:"anotherKey": "(?<anotherKey>[^"]+)")
这个确实获得了“ anotherKey”,但是它只返回数组中的第一项,而不是全部。
也:https://regex101.com/r/mfXlRs/1
有人可以用正确的方式让我吗?
谢谢
答案 0 :(得分:0)
您的arrayKey1..3
的正则表达式(仅)给出了三项独立的匹配,并且在每项中
匹配您得到3个必需值。
现在,在添加片段以寻找anotherKey
之后,但在父级,
情况改变了。
现在您只有一个单个匹配项,因为:
arraykeys
的第一组匹配。(?:[\s\S]*)
匹配所有anotherKey
,包括
其余两套arraykeys
。anotherKey
相匹配。也许您应该分两个步骤执行匹配:
anotherKey
。将+
量词添加到“旧”组中将无济于事,因为如果捕获
组被匹配了几次,则该组将仅保留最后一个匹配。