除去html标记,但<;b>;使用正则表达式c#

除去html标记,但<;b>;使用正则表达式c#,c#,regex,html-parsing,C#,Regex,Html Parsing,我想剥离所有html,但使用regex保留标记。有没有更好的方法来代替 将替换为非html标记,如$b$ 使用]*> 将$b$替换为 下面是一种只允许打开和关闭b标签的方法。任何其他标签都将被删除 var teststring = "Test <b>test</b> lorem <i>ipsum</i>"; var pattern = @"(?!</?b>)<.*?>"; // assuming open and closi

我想剥离所有html,但使用regex保留
标记。有没有更好的方法来代替

  • 替换为非html标记,如$b$
  • 使用
    ]*>
  • 将$b$替换为

  • 下面是一种只允许打开和关闭
    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));
    
    var teststring=“Test Test lorem ipsum”; 变量模式=@“(?!)”;//假设保留打开和关闭标记 Console.WriteLine(Regex.Replace (测试字符串, 图案 字符串。空, RegexOptions.Multiline));
    输出:
    Test-Test-lorem-ipsum

    Regex不是解析html/xml的最佳工具。深入研究,您可以使用XPath解析它的元素并更轻松地实现您的目标。@Jean,虽然正则表达式不适合嵌套构造,但如果OP不关心嵌套(并且只关心
    标记,而不管嵌套级别如何),那么正则表达式就可以正常工作。(另外,大多数HTML——特别是HTML5 HTML——都不是有效的XML。例如,

    是完全合法但无效的XML)是的。我不知道还有什么其他的构造。我只想把除了b标签以外的所有标签都去掉。我只做了一个小的html片段(1000个字符),谢谢Drf。好奇的是,你的执行速度会比我的快吗?另外,我希望去除html标记,而不是对其进行编码。我根据您的评论更新了代码。很难回答的性能问题,但是(根据免责声明),我不希望这种方法对单个标签更快。但是,它可以简化添加其他标记的过程。您的方法的一个潜在(可能是次要)问题是,如果输入恰好包含文本
    $b$
    ,它将被错误地翻译为