从C#中的大文本中获取特定字符串

时间:2014-02-10 23:38:02

标签: c# regex string image url

我有以下大文: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。

3 个答案:

答案 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