【问题标题】:Strip html tags except <b> using regex c#使用正则表达式 c# 去除除 <b> 之外的 html 标签
【发布时间】:2013-05-01 01:36:42
【问题描述】:

我想去除所有的 html,但使用正则表达式保留 &lt;b&gt; 标签。有没有更好的方法来代替

  1. &lt;b&gt; 替换为$b$ 等非html 标记
  2. 使用&lt;[^&gt;]*&gt;删除所有html标签
  3. 将 $b$ 替换为 &lt;b&gt;

【问题讨论】:

  • 正则表达式并不是解析 html/xml 的最佳选择。查看XmlDocument,您可以使用 XPath 解析它的元素并更轻松地实现您的目标。
  • @Jean,虽然正则表达式对于嵌套结构并不理想,但如果 OP 不关心嵌套(并且只关心 &lt;b&gt; 标记而不管嵌套级别如何),那么正则表达式就可以正常工作。 (还有大多数 HTML——尤其是 HTML5 html——不是 有效的 XML。例如,&lt;br&gt; 是完全合法但无效的 xml)
  • 是的。我没有任何其他构造。我只想剥离除 b 标记之外的所有内容。我只是在做这个小 html sn-p(1000 个字符)

标签: c# regex html-parsing


【解决方案1】:

下面是一种只允许打开和关闭b 标记的方法。任何其他标签都将被删除。

var teststring = "Test <b>test</b> lorem <i>ipsum</i>";
var pattern = @"(?!</?b>)<.*?>"; // assuming open and closing tags are retained
Console.WriteLine(Regex.Replace
       (teststring,
         pattern,
         String.Empty,
         RegexOptions.Multiline));

输出:Test &lt;b&gt;test&lt;/b&gt; lorem ipsum

【讨论】:

  • 谢谢 Drf。好奇你的执行速度会比我的更快吗?我也希望去掉 html 标签而不是对其进行编码。
  • 我根据您的评论更新了代码。很难回答 a number of reasons 的性能问题,但是(带有免责声明)我不希望这种方法对单个标签更快。但是,它可以简化添加其他标签的过程。您的方法的一个潜在(可能是次要)问题是,如果输入恰好包含文本 $b$,它将被错误地转换为 &lt;b&gt;
猜你喜欢
  • 2011-05-03
  • 2023-03-10
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
相关资源
最近更新 更多