如何在HTML字符串中查找所有图像链接

时间:2012-09-04 09:35:37

标签: .net regex image html-parsing embedding

我正在尝试构建一个用于解析HTML文件并获取所有图像文件的正则表达式。我需要这样做才能在将图像作为电子邮件发送之前嵌入图像。

是否有可以引用图像的“地点列表”?例如,我知道我需要查看<img src="here" />内部,或CSS样式url('here')background='here',但这是否涵盖所有情况?

正则表达式是否已存在于某处?我发现编写正则表达式很痛苦,我不想错过一个案例,或者忘记处理一些破坏的HTML标记。

对于<img>代码,我发现了类似的内容:

(?<=img\s+src\=[\x27\x22])(?<Url>[^\x27\x22]*)(?=[\x27\x22])

但我不知道如何包含其他地方。

2 个答案:

答案 0 :(得分:4)

不要使用正则表达式来解析html,而是使用像HtmlAgilityPack这样的Html解析器

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

var a = doc.DocumentNode.Descendants("img")
            .Select(x => x.Attributes["src"].Value)
            .ToArray();

答案 1 :(得分:1)

正则表达式往往是poor choice for parsing HTML,特别是来自不同来源的HTML。

我建议使用HTML Agility Pack - 一个专用的HTML解析器。

  

什么是Html Agility Pack(HAP)?

     

这是一个敏捷的HTML解析器,它构建一个读/写DOM并支持普通的XPATH或XSLT(你实际上不需要理解XPATH或XSLT来使用它,不用担心......)。它是一个.NET代码库,允许您解析“out of the web”HTML文件。解析器非常容忍“真实世界”格式错误的HTML。对象模型与提出System.Xml非常相似,但对于HTML文档(或流)。

另一种选择是ScarpySharp,一个HtmlAgilityPack扩展,用于使用css选择器(如JQuery)选择元素。