C# 提取具有特定限制的字符串部分

C# 提取具有特定限制的字符串部分,c#,arrays,string,C#,Arrays,String,我有个小问题。我的字符串的格式如下: {"version":"5.14.1","id":"ABCD","key":"266",...... etc 我想在“id”之后得到ABCD,这是我尝试过的 我试过了 string[] output; output = Regex.Matches(site,"(?<=(?:\"id\")\:\")([^\"]+)").Cast<Match>().Select(m => m.Value).ToArray(); string[]输出;

我有个小问题。我的字符串的格式如下:

{"version":"5.14.1","id":"ABCD","key":"266",...... etc
我想在“id”之后得到ABCD,这是我尝试过的

我试过了

string[] output;
output = Regex.Matches(site,"(?<=(?:\"id\")\:\")([^\"]+)").Cast<Match>().Select(m => m.Value).ToArray();
string[]输出;
output=Regex.Matches(site,“(?Regex错误是正确的--
不是正则表达式中的特殊字符(例如
(?:)
组中的上下文除外),因此无法对其进行转义。(请注意,这里有两个级别的转义:当在C#字符串中看到
\:
时,C#编译器决定
不是特殊的,因此在它前面有一个反斜杠;然后,正则表达式引擎尝试解释它并生成错误。)

执行所需操作(无论如何,对于示例字符串)的正则表达式是:

但是我建议使用一个合适的解析器,因为它看起来很像JSON。正则表达式很方便,但它假设在这里使用一个解析器的输入有很多(例如,可能会有像
{'foo':'id:'hmm',“id:'realid'。
明白了吗

output = Regex.Matches(site,"(?<=(?:\"id\")\\:\")([^\"]+)").Cast<Match>().Select(m => m.Value).ToArray();

output=Regex.Matches(site,”(?不要使用正则表达式来尝试解析JSON,它不会涵盖所有场景,而您只是在与一些本应简单的事情作斗争

创建一个类以容纳所需的属性:

 class MyData { 
   public string Version { get; set; }
   public string Id { get; set; }
   ...
 }
安装NuGet软件包Newtonsoft JSON:
安装软件包Newtonsoft.JSON

string myData = "{\"version\":\"5.14.1\",\"id\":\"ABCD\" }";

MyData data = JsonConvert.DeserializeObject<MyData>(myData);
Dictionary<string, string> dataAsDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(myData);
string abcd = data.Id;
abcd = dataAsDictionary["id"];
string myData=“{\”version\”:\“5.14.1\”,\“id\”:\“ABCD\”;
MyData data=JsonConvert.DeserializeObject(MyData);
Dictionary dataAsDictionary=JsonConvert.DeserializeObject(myData);
字符串abcd=data.Id;
abcd=dataAsDictionary[“id”];

如果您使用
字典
方法,您不需要类,但它不是强类型的。

您真的需要使用正则表达式处理字符串吗?如果字符串始终保持格式正确的JSON,那么使用它会更快、更简单、更不容易出错:


你确定不需要JSON解析器吗?我现在不想使用它,但我已经解决了。我只需要在正则表达式中的\:“之前添加一个\即可
 class MyData { 
   public string Version { get; set; }
   public string Id { get; set; }
   ...
 }
string myData = "{\"version\":\"5.14.1\",\"id\":\"ABCD\" }";

MyData data = JsonConvert.DeserializeObject<MyData>(myData);
Dictionary<string, string> dataAsDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(myData);
string abcd = data.Id;
abcd = dataAsDictionary["id"];
string yourString = "{\"version\":\"5.14.1\",\"id\":\"ABCD\",\"key\":\"266\"}";    // etc

dynamic json = JsonConvert.DeserializeObject(yourString);
Console.WriteLine(json.id);    // displays ABCD