剥离HTML,保持粗体/强标签

时间:2011-08-23 13:50:37

标签: c# regex

我有一小部分正则表达式可以删除所有HTML,效果很好。我现在需要做的是删除所有HTML,但保留<b><strong>标记。

非常感谢任何帮助。

shortDesc = System.Text.RegularExpressions.Regex.Replace(shortDesc, @"<[^>]*>", String.Empty);

谢谢!

3 个答案:

答案 0 :(得分:4)

  1. 停止尝试parse HTML with a regular expression
  2. 使用HTML Agility Pack
  3. 之类的内容

答案 1 :(得分:2)

以下是正则表达式的简单扩展,应该可以很好地运行:

Regex re = new Regex(@"<(?!/?(?:strong|b)\b)[^>]*>",
    RegexOptions.IgnoreCase);
text = re.Replace(text, "");

答案 2 :(得分:0)

根据我在你的评论中收集的内容,如果您满足以下要求,可以使用正则表达式(虽然通常因为显而易见的原因而被避开):

  1. HTML没有格式错误。
  2. 不会包含“&lt;”和“&gt;”作为* 的一部分,除了打开/关闭标签*
  3. 如果html页面在你的控制之下,假设你可以满足这两个条件是合理的,否则我不会打扰。

    在您的情况下,您可以使用替换方法的重载实例,该方法接受 MatchEvaluator 委托及其他参数。

    用法示例:

    MatchEvaluator replaceCallback = new MatchEvaluator(MatchHandler);
    Regex RE = new Regex(matchPattern, RegexOptions.Multiline);
    string newString = RE.Replace(source, replaceCallback);
    

    MatchHandler示例:

    public static string MatchHandler(Match theMatch) {
      if (theMatch.Value.StartsWith("<b>") || ...) {
        return theMatch.Value;  //return as is
      }
      //else return empty string
      return "";
    }