Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非固定长度查找解决方案_C#_Json_Regex - Fatal编程技术网

C# 非固定长度查找解决方案

C# 非固定长度查找解决方案,c#,json,regex,C#,Json,Regex,考虑以下问题: 第一: { “好”:{ “a”:“, “c”:“, “e”:” }, “坏”:{ “a”:“, “c”:“, “e”:” } } 第二: { "Good": { "a": "<kind of good>", "c": "<more good>", "e": "<the most good>" }, "Bad": { "a": "<a little bad>", "c": "<

考虑以下问题:
第一:

{
“好”:{
“a”:“,
“c”:“,
“e”:”
},
“坏”:{
“a”:“,
“c”:“,
“e”:”
}
}
第二:

{
  "Good": {
    "a": "<kind of good>",
    "c": "<more good>",
    "e": "<the most good>"
  },
  "Bad": {
    "a": "<a little bad>",
    "c": "<more bad>",
    "e": "<the most bad>"
  }
}
{
“好”:{
“a”:“,
“c”:“,
“e”:”
},
“坏”:{
“a”:“,
“c”:“,
“e”:”
}
}
第三:

{
  "Good": {
    "a": "<good>",
    "c": "<better>",
    "e": "<best>"
  },
  "Bad": {
    "a": "<bad>",
    "c": "<better>",
    "e": "<worst>"
  }
}
{
“好”:{
“a”:“,
“c”:“,
“e”:”
},
“坏”:{
“a”:“,
“c”:“,
“e”:”
}
}
在所有情况下,我都必须从对象“Good”中提取属性“c”及其值,用该值进行一些操作,然后用新值替换旧值

问题在于对象“坏”。我对该对象的值不感兴趣,也不应该替换其中的任何内容。
到目前为止,我想出了一个正则表达式:

(?<!Bad)"c": "(<.*?>)"
(?
显而易见的问题是,对象“Bad”的名称并没有立即位于属性“c”之前,而且它们之间的符号可能(和将)有所不同。而且,据我所知,lookbehind应该是固定长度的,所以我不能仅仅使用这样的东西:

(?<!Bad.*)"c": "(<.*?>)"
(?
我在C#中使用regex,所以我想只使用第一个实例,但它不是最可靠的解决方案,而且它仍然不能通过替换来解决问题

谈到替换。我想动态创建正则表达式以确保只替换正确的匹配项。但是对于第三个示例,这个技巧不起作用,因为
“c”:“()”
将在对象“Good”和“Bad”中匹配


有人能帮我吗?

你可以使用JSON.NET解析JSON。因为你知道JSON中有一个特定的值,你可以使用一个简单的代码(这里,用括号括住
e
值):


你为什么要用正则表达式而不是用JSON解析器,比如,或?@dbc,这是一个很好的问题。这一切开始很简单,然后变成了这个怪物;也许,我真的不需要用正则表达式来解析它。不过,如果有一种正确的方法用正则表达式来解析它,我会很高兴知道的。你不能rse JSON使用.NET正则表达式而不平衡表达式,与使用实际的JSON解析器相比,这是一个很大的工作量。谢谢,@Ryan,我想我必须这样做。是的,似乎是我要使用的方向。谢谢你,Wiktor!
(?<!Bad.*)"c": "(<.*?>)"
dynamic parsedObject = Newtonsoft.Json.JsonConvert.DeserializeObject(data);
parsedObject["Good"]["e"] = $"({parsedObject["Good"]["e"]})";
var res = parsedObject.ToString();