我正在尝试构建一个用于解析HTML文件并获取所有图像文件的正则表达式。我需要这样做才能在将图像作为电子邮件发送之前嵌入图像。
是否有可以引用图像的“地点列表”?例如,我知道我需要查看<img src="here" />
内部,或CSS样式url('here')
或background='here'
,但这是否涵盖所有情况?
正则表达式是否已存在于某处?我发现编写正则表达式很痛苦,我不想错过一个案例,或者忘记处理一些破坏的HTML标记。
对于<img>
代码,我发现了类似的内容:
(?<=img\s+src\=[\x27\x22])(?<Url>[^\x27\x22]*)(?=[\x27\x22])
但我不知道如何包含其他地方。
答案 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)选择元素。