我有以下大文:http://freetexthost.com/15nbm0dhob 我需要从standard_resolution获取所有图像URL。
"standard_resolution": {
"url": "http://distilleryimage3.s3.amazonaws.com/59d6984092a211e392db12e25f465f4f_8.jpg",
"width": 640,
"height": 640
}
例如:从此,我想得到:http://distilleryimage3.s3.amazonaws.com/59d6984092a211e392db12e25f465f4f_8.jpg
毕竟我想要一个包含所有标准URL的字符串列表。 我正在制作一个C#App。
答案 0 :(得分:0)
我认为你可以使用这种模式:^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
以下是一个例子:
var pattern = @"^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$";
var result= File.ReadAllText("filepath")
.Split(new[] {'"'}, StringSplitOptions.RemoveEmptyEntries)
.Where(line => Regex.IsMatch(line, pattern))
.ToList();
我已经过测试,result
包含25
个网址供您输入。
答案 1 :(得分:0)
尝试:
List<String> urls = new List<String>();
string txt = "standard_resolution...."; // Your main text
while(txt.Contains("url"))
{
txt = txt.Substring(txt.IndexOf("url\": \""));
string geturl = txt.Substring(txt.IndexOf("url")+7, txt.IndexOf(".jpg") - txt.IndexOf("url")-3);
urls.Add(geturl);
txt = txt.Substring(txt.IndexOf(".jpg"));
}
答案 2 :(得分:0)
Selman22:您的答案将获得所有网址,而他只需要标准网址。
这是我放在一起的快速而肮脏的正则表达式。 您可能需要稍微调整一下以涵盖我在JSON结构方面尚未考虑的所有潜在案例,因为它与您发布的源略有不同。
const string input = @"
""standard_resolution"": {
""url"": ""http://distilleryimage3.s3.amazonaws.com/59d6984092a211e392db12e25f465f4f_8.jpg"",
""width"": 640,
""height"": 640
}";
var pattern = @"\""standard_resolution\"".*?\""url\""\:\s\""(?<url>.*?)\""";
var urls = Regex.Matches(input.Replace("\r\n", string.Empty), pattern)
.Cast<Match>()
.Select(each => each.Groups["url"].Value);
var count = urls.Count();
在您的问题的直接范围之外的另一个选择是使用JSON解析器: Parsing JSON using Json.net