提取具有特定限制的字符串部分
本文关键字:字符串部 提取 | 更新日期: 2023-09-27 18:03:58
我有一个小问题。我的字符串具有以下格式;
{"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();
但是当我尝试编译时,它说id后面的冒号"无法识别的转义序列"。
我使用的Regex表达式是:
(?<=(?:"id")':")([^"]+)
但我不确定如何把它放在正则表达式内。匹配(我试图将'放在"之前,但它显示无法识别的转义序列)
regex错误是正确的——:
不是正则表达式中的特殊字符(除了上下文上下文中的(?:)
组),所以它不能被转义。(请注意,这里有两个级别的转义:当':
在c#字符串中看到时,c#编译器决定:
不是特殊的,因此无声地将其与前面的文字反斜杠分开;然后,正则表达式引擎尝试解释它并生成错误。)
一个你想要的正则表达式(无论如何,对于示例字符串)是:
"'"id'":'"([^'"]+)"
但我建议使用适当的解析器,因为这看起来很像JSON。正则表达式很方便,但是在这里使用它对输入有很多假设(例如,可能有像{'foo':'"id":"hmm"',"id": "realid"...
不要使用正则表达式来尝试解析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
方法,则不需要类,但它不是强类型的。
您真的需要使用正则表达式处理字符串吗?如果字符串总是保存正确格式的JSON,那么使用专门构建的JSON解析器会更快、更容易、更少出错:
string yourString = "{'"version'":'"5.14.1'",'"id'":'"ABCD'",'"key'":'"266'"}"; // etc
dynamic json = JsonConvert.DeserializeObject(yourString);
Console.WriteLine(json.id); // displays ABCD
明白了
output = Regex.Matches(site,"(?<=(?:'"id'")'':'")([^'"]+)").Cast<Match>().Select(m => m.Value).ToArray();