2013-11-25 4 views
2

Я хочу получить ссылки на изображения из img src в html. У меня есть строка html, которую я читаю в методе, который возвращает arraylist URL-адресов изображений.C# Regex img src

В метод передаю строку html и URL-адрес веб-страницы.

Мне нужна помощь с регулярным выражением, чтобы получить имя изображения с расширением. Если вы можете помочь с сопоставлением с строкой html, которая будет бонусом. Я согласен с правильным ответом или рядом с ним, спасибо всем.

Я слышал о парсерах HTML, но я предпочел бы использовать этот способ, спасибо.

вот мой метод:

private ArrayList GetImageLinks(String inputHTML, String link) 
    { 
     ArrayList imageLinks = new ArrayList(); 
     var regex = new Regex(@"<img.*?src=[\"'](.+?)[\"'].*?"); 

     //using http://gskinner.com/RegExr/ this regex seems to get: <img src="beach.png" for example. while I need just beach.png. 

     //match the regex to the html and get all the image links like: image5.png 
     //link = inputHTML + link 
     //add new link to arraylist 



     return imageLinks; 
    } 
+1

Анализ HTML с помощью Regex, что может пойти не так. –

+3

Нет никакой веской причины не использовать HtmlAgilityPack для этого. Если вы действительно хотите регулярного выражения, вы должны сделать это сами, так как по крайней мере у вас будет небольшой шанс понять это регулярное выражение в вашем коде, когда вы увидите его через месяц. –

+0

Возможный дубликат [Regex для получения значения src из тега img] (http://stackoverflow.com/questions/1058852/regex-to-get-src-value-from-an-img-tag) - даже содержит некоторые версия регулярного выражения решения ... –

ответ

2

Я не понимаю, что вы хотите сделать с источником изображения после извлечения.

Вот как вы можете извлекать ссылки на изображения.

static IEnumerable<String> GetImageLinks(String inputHTML, String someLink) 
{ 
    const string pattern = @"<img\b[^\<\>]+?\bsrc\s*=\s*[""'](?<L>.+?)[""'][^\<\>]*?\>"; 

    foreach (Match match in Regex.Matches(inputHTML, pattern, RegexOptions.IgnoreCase)) 
    { 
     var imageLink = match.Groups["L"].Value; 

     /* Do something from your image link here*/ 

     yield return imageLink; 
    } 
} 
1

Вы можете использовать WebBrowser сделать что вместо манипуляций со строками

 private string HtmlUpdateWithImage(string stringHtml) 
     { 
      System.Windows.Forms.WebBrowser browser = new System.Windows.Forms.WebBrowser(); 
      browser.Navigate("about:blank"); 
      HtmlDocument doc = browser.Document; 
      doc.Write(stringHtml); 

      if (null != browser.Document && null != browser.Document.Images && browser.Document.Images.Count > 0) 
      { 
       // Here you can get the image list browser.Document.Images 
       foreach (System.Windows.Forms.HtmlElement item in browser.Document.Images) 
       { 
        // To get file path for each image 
        string imageFilePath = item.GetAttribute("src"); 
        // Or either you can set those values 

        item.SetAttribute("src","testPath"); 
       } 
      } 
      return "<HTML>" + browser.Document.Body.OuterHtml + "</HTML>"; 
     } 
0

Если вы хотите просто взять имя изображения, просто использовать метод GetFileName() класса Path:

string [email protected]"http://hello.com/a/s/s/fff.jpg"; 
string takeName=Path.GetFileName(internetAddress);