我有这个结构:
{
"longUrl" :"http://www.sample.com",
"bok" :1,
"url" :"http://pleasegetme.com ",
"title" :""
}
//equivalent
"{
\n \"longUrl\" :\"http://www.sample.com/\",
\n \"bok\" :1,
\n \"url\" :\"http://pleasegetme.com \",
\n \"title\" :\"\"\n
}"
我有这个功能
public string Domain1Helper(string longText)
{
Regex rgxUrl = new Regex("\"url\":\"(.*?)\"");
Match mUrl = rgxUrl.Match(longText);
string url = Regex.Replace(mUrl.Groups[1].Value, @"\\", "");
return url;
}
我想得到的是http://pleasegetme.com
。
我的Domain1Helper
方法有什么问题?
答案 0 :(得分:2)
你有一个JSON字符串。您可以使用名为Json.Net的库来解析此问题。你可以找到这个nuget包。然后,您可以使用以下代码挑选出您想要的字符串。
var entity = new class {
constructor(name) { this.name = name; }
getName() { return this.name; }
}('Foo');
console.log(entity.getName()); // Foo
答案 1 :(得分:1)
AJB,您的RegEx中有错误。 话虽这么说你应该使用JSON反序列化器,如JSON.NET。 在函数Domain1Helper中它应该是:
Regex rgxUrl = new Regex("\"url\"\\s+:\"(.*?)\"");
注意\ s +?
答案 2 :(得分:0)
这是一个怪异的JSON格式字符串。使用JSON反序列化器,如JSON.NET。我会告诉你你想要使用哪一个。
这是使用json2csharp.com生成的根对象
public class RootObject
{
public string longUrl { get; set; }
public int bok { get; set; }
public string url { get; set; }
public string title { get; set; }
}
使用JSON.NET的示例:
using Newtonsoft.Json; // Namespace is something like this
string json = "{
\n \"longUrl\" :\"http://www.sample.com/\",
\n \"bok\" :1,
\n \"url\" :\"http://pleasegetme.com \",
\n \"title\" :\"\"\n
}";
RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(json);
string url = rootObject.url;
// Do something with the url
答案 3 :(得分:0)
您已包含转义字符串\
。如果删除它们,它应该解析得很好,如下所示:
https://regex101.com/r/hK7xR7/1
请注意,您的方法应如下所示:
public string Domain1Helper(string longText)
{
Regex rgxUrl = new Regex(@"\"url\" :\"(.*?)\"");
Match mUrl = rgxUrl.Match(longText);
string url = Regex.Replace(mUrl.Groups[1].Value, @"\\", "");
return url;
}
另一种解决方案是使用一个json库,如下所述:https://msdn.microsoft.com/en-us/library/cc197957(v=vs.95).aspx