【问题标题】:How do I find all image links in a HTML string如何在 HTML 字符串中找到所有图像链接
【发布时间】:2012-08-28 22:40:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: .net regex image html-parsing embedding


    【解决方案1】:

    不要使用正则表达式来解析 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();
    

    【讨论】:

      【解决方案2】:

      正则表达式往往是 poor choice for parsing 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)选择元素。

      【讨论】:

      • 谢谢,但 CSS 样式 (url(...)) 无济于事。我应该仅将这部分解析为文本吗?
      • @Dilbert - A CSS Parser 可用于该部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      相关资源
      最近更新 更多