如何用必需的子串替换JSon字符串的子串

时间:2015-03-06 11:43:56

标签: c# regex json string substring

以下字符串包含JSon解析的字符串。

      string myJSonString="{ \"_id\" : { \"$oid\" : \"54f6b062036de221c00f5540\" }, \"account\" : \"Acc1\", \"accuser\" : \"\", \"curstatus\" : \"booked\" }";

      string oldString=" { \"$oid\" :";
      string newString="";

我使用下面的代码来使用正则表达替换子字符串,但它不起作用;

    string   result = Regex.Replace(myJSonString, oldString, newString, RegexOptions.IgnoreCase);

第二次替换

    string oldStrin="}, \"account\"";
   string newString=", \"account\"";
  string   finalResult = Regex.Replace(result , oldString2, newString2, RegexOptions.IgnoreCase);

此代码对我不起作用;

2 个答案:

答案 0 :(得分:1)

如果它真的像你的例子一样简单,我会使用常规字符串替换,我觉得更容易理解:

string myJSonString="{ \"_id\" : { \"$oid\" : \"54f6b062036de221c00f5540\" }, \"account\" : \"Acc1\", \"accuser\" : \"\", \"curstatus\" : \"booked\" }";

string result = myJSonString.Replace(" { \"$oid\" :", "").Replace("}, \"account\"", ", \"account\"");

//{ "_id" : "54f6b062036de221c00f5540" , "account" : "Acc1", "accuser" : "", "curstatus" : "booked" }

答案 1 :(得分:0)

由于$是正则表达式中的特殊字符,因此您的版本可能无法正常工作 - 它是anchor,表示行的结尾或结尾字符串,因此需要使用\进行转义。

话虽如此,我们可以构建一个正则表达式来查找整个部分并用内部ID替换它,而不是替换ID之前和之后的部分,而不是替换它:

string pattern = "{ \"\\$oid\" : (\"[a-z0-9]+\") }";

string myJSonString = "{ \"_id\" : { \"$oid\" : \"54f6b062036de221c00f5540\" }, \"account\" : \"Acc1\", \"accuser\" : \"\", \"curstatus\" : \"booked\" }";

string finalResult = Regex.Replace(myJSonString, pattern, "$1");