【问题标题】:Strip all HTML tags except certain ones?去除除某些 HTML 标签之外的所有 HTML 标签?
【发布时间】:2020-02-09 14:18:11
【问题描述】:

我有一个要求,我需要从标签汤的一大块 HTML 中去除所有标签,基本上是这样的:

<div style=""><span style=""><p style=""><div style=""><span style="">

等等

我需要把它们全部去掉,除了<p>标签,但在那些我需要去掉style=""之类的属性并将它们保留为<p></p>

我目前正在使用正则表达式剥离所有标签:

public static string StripHtml(string input) => Regex.Replace(input, "<.*?>", string.Empty)

关于如何做到这一点的任何想法?

我会为此使用定制的 C# 库,但我在 Linux 上使用 .Net Core,因此许多需要完整框架的库(例如 AngleSharp)对我不起作用。

【问题讨论】:

  • 无论你做什么,don't
  • @CeeMcSharpface 我了解使用正则表达式解析 HTML 的缺点,这不是我的首选,但我正在使用的需要解析的 strings 大小有限且格式正确结构上。我们说的是一次最多 1k 字节的 HTML,带有适当的开始和结束标签。

标签: c# parsing asp.net-core .net-core asp.net-core-mvc


【解决方案1】:

<((?!p\s).)*?> 将为您提供除段落之外的所有标签。因此,您的程序可以删除此正则表达式的所有匹配项,并将其余标签(所有 p)替换为空段落标签。 (<p .*?> 用于接收所有 p-tags 的正则表达式)

【讨论】:

  • 谢谢,如何从剩余的<p> 标签中删除所有属性,只留下空的<p>?我特别需要删除样式属性。我对正则表达式很糟糕。如有必要,我可以分两步完成。
  • 如前所述,您可以将<p .*?> 的匹配项替换为<p>
  • 当我在我的正则表达式中添加一个最终的.Replace 时,<p> 标记没有被清除属性:.Replace("<p .*?> ", string.Empty); ...就像我说我对正则表达式不太好,我假设p 和 之间的那个空间。正确的?知道为什么这没有被消灭吗?第一个正则表达式效果很好,按预期取出除<p> 标签之外的所有标签。
  • 我还需要它来保留关闭的 </p> 标签,因为我需要使用它在需要正确打开/关闭标签的 Angular 中设置 InnerHtml
  • 删除<((?!p\b).)*?>而不是<((?!p\s).)*?>的所有匹配项,结束标记将被保留。
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 2011-09-08
  • 2013-05-01
  • 1970-01-01
  • 2011-05-15
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多