2012-05-16 103 views
0

我在C#中使用網站和正則表達式。我有這種情況: 正則表達式:多行html問題

   <a href="path/to/image"> 
    <img src="thumbnail"></a> 

這概括是我的應用程序如何獲得一個給定網站的內容。每行的製表符和折線不相同。

我使用gskinner檢查正則表達式(http://gskinner.com/RegExr/)和我已經創建此正則表達式:

  (?i)<a([^>]+)>\W.*</a> 

標誌:多行

Gskinner表明圖案是正確的。但是當我放入c#(regEx.Matches(...))時,它再也找不到匹配了。

有沒有人有任何線索如何做到這一點?

由於使用HtmlAgilityPack

+5

不要將其與正則表達式。請參閱http://stackoverflow.com/q/590747/390819。解析HTML的正確工具之一是http://htmlagilitypack.codeplex.com/ – GolfWolf

回答

0

和您的樣本串

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

-

var href = doc.DocumentNode 
    .Descendants("a") 
    .Select(n => n.Attributes["href"].Value) 
    .FirstOrDefault(); 

var src = doc.DocumentNode 
    .Descendants("img") 
    .Select(n => n.Attributes["src"].Value) 
    .FirstOrDefault(); 
+0

+1以提供替代方案。 – stema

+0

好的,很酷。我嘗試了HtmlAgilityPack,但是當我用ToList()替換FirstOrDefault()時,我得到一個對象引用未設置的異常。我需要頁面中的所有鏈接,而不是一個。這個怎麼做? –

+0

您可以在Select之前添加'.Where(n => n.Attributes [「someattr」]!= null)'以確保屬性不爲空 –