如何从字符串中删除所有HTML标记而不知道其中包含哪些标记?

RJ.*_*RJ. 110 html c#

有没有简单的方法来删除所有HTML标签或从字符串相关的任何HTML?

例如:

string title = "<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)"
Run Code Online (Sandbox Code Playgroud)

以上应该是:

"绿巨人霍根的名人冠军摔跤[Proj#206010](现实系列)"

Bid*_*dou 224

您可以使用这样的简单正则表达式:

public static string StripHTML(string input)
{
   return Regex.Replace(input, "<.*?>", String.Empty);
}
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案有其自身的缺陷.有关更多信息,请参阅删除String中的HTML标记(尤其是@mehaase的注释)

另一种解决方案是使用HTML Agility Pack.
您可以在此处找到使用该库的示例:HTML敏捷包 - 删除不需要的标记而不删除内容?

  • 方法名不应该是 StripHtml() 因为方法名应该使用 Pascal 大小写吗? (3认同)
  • 只需将正则表达式更改为 &lt;[a-zA-Z/]*?&gt; (3认同)
  • 不适用于输入:'7 &lt; 10 &lt;b&gt;but&lt;/b&gt; 30 &gt; 10' 它给出:'7 but 30 &gt; 10' (2认同)
  • @BrandonPrudent 也许更好的是 `&lt;[a-zA-Z/].*?&gt;` - 它包括属性 (2认同)

ssi*_*777 46

您可以使用Html Agility包解析字符串并获取InnerText.

    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(@"<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)");
    string result = htmlDoc.DocumentNode.InnerText;
Run Code Online (Sandbox Code Playgroud)

  • 我意识到`&nbsp;`是一个html实体,而不是标签,所以删除它的解决方案可能是`result = WebUtility.HtmlDecode(result);`并删除注释节点,使用Html Agility Pack:`htmlDoc .DocumentNode.SelectNodes("// comment()")?. ForEach(c => c.Remove());`就在执行`result = htmlDoc.DocumentNode.InnerText;`之前 (5认同)
  • 我喜欢 `InnerText` 解决方案,因为它删除了所有标签。但是……它留下了 ` ` 和诸如 `&lt;!-- xxx --&gt; ` 的注释标签,就像那些围绕着 `v:shapetype`、`v:shape` 或 `v:imagedata` 的带有 `[ if gte vml 1]` 或 `[if !vml]` (2认同)

Vin*_*nay 7

您可以在字符串上使用以下代码,您将获得不带 html 部分的完整字符串。

string title = "<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)".Replace("&nbsp;",string.Empty);            
        string s = Regex.Replace(title, "<.*?>", String.Empty);
Run Code Online (Sandbox Code Playgroud)