1

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

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

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

对于<img>标签,我发现了这样的内容:

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

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

4

2 回答 2

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();
于 2012-09-04T09:41:06.830 回答
1

正则表达式往往是解析 HTML 的糟糕选择,尤其是来自不同来源的 HTML。

我建议使用HTML Agility Pack——为此专门构建的 HTML 解析器。

什么是 Html Agility Pack (HAP)?

这是一个敏捷的 HTML 解析器,它构建一个读/写 DOM 并支持普通的 XPATH 或 XSLT(实际上你不必了解 XPATH 或 XSLT 就可以使用它,不用担心......)。它是一个 .NET 代码库,允许您解析“网络之外”的 HTML 文件。解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.Xml 的提议非常相似,但用于 HTML 文档(或流)。

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

于 2012-09-04T09:39:23.463 回答