2012-05-16 61 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)'以确保属性不为空 –