我有一个小问题。我的字符串具有以下格式;
{"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();
但是当我尝试编译它时说&#34;无法识别的转义序列&#34;为id后的冒号。
我使用的正则表达式是:
(?<=(?:"id")\:")([^"]+)
但是我不确定如何把它放在Regex.Matches中(我试图在\#34之前放置\;但它表示无法识别的转义序列)
答案 0 :(得分:0)
正则表达式错误是正确的 - :
不是正则表达式中的特殊字符(例如(?:)
组中的上下文除外),因此无法对其进行转义。 (注意,这里有两个转义级别:当在C#字符串中看到\:
时,C#编译器决定:
不是特殊的,所以默默地保留它前面的文字反斜杠然后,正则表达式引擎尝试解释它并生成错误。)
执行所需操作的正则表达式(对于示例字符串,无论如何)是:
"\"id\":\"([^\"]+)"
但我建议使用正确的解析器,因为这看起来很像JSON。正则表达式很方便,但它在这里使用一个输入假设很多(例如可能有像{'foo':'"id":"hmm"',"id": "realid"...
答案 1 :(得分:0)
不要使用正则表达式来尝试解析JSON,它不会涵盖所有场景,而你只是在反对那些应该很容易的事情。
创建一个类来容纳您需要的属性:
class MyData {
public string Version { get; set; }
public string Id { get; set; }
...
}
安装NuGet包Newtonsoft JSON:install-package 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"];
如果您使用Dictionary
方法,则不需要课程,但不是强类型。
答案 2 :(得分:0)
你真的需要使用正则表达式来处理字符串吗?如果字符串将始终保持正确形成的JSON,那么使用a purpose-built JSON parser会更快,更容易且更不容易出错:
string yourString = "{\"version\":\"5.14.1\",\"id\":\"ABCD\",\"key\":\"266\"}"; // etc
dynamic json = JsonConvert.DeserializeObject(yourString);
Console.WriteLine(json.id); // displays ABCD
答案 3 :(得分:-1)
搞定了
output = Regex.Matches(site,"(?<=(?:\"id\")\\:\")([^\"]+)").Cast<Match>().Select(m => m.Value).ToArray();