如何在不知道字符串中包含哪些标签的情况下从字符串中删除所有HTML标签?


121

有什么简单的方法可以删除字符串中的所有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;)"

以上应该是:

“绿巨人霍根的名人冠军摔跤[项目编号206010](现实系列)”


由于重复,此问题已关闭,但建议的答案是使用HTML Agility Pack提供的。如果您想使用HTML Agility Pack删除html标签,则可以在此处stackoverflow.com/a/30026043/2318354参阅我的答案。这可能对某些人有所帮助
Dilip0165

6
这不是重复的内容,例如“ HTML敏捷包-删除不需要的标签而不删除内容?” 想要保留一些标签(即提供有效标签列表,删除其余标签)。这里的问题是关于删除所有标签。而且我不能使用其他问题的答案,因为我不会传递存在的所有html标记的列表。
Thierry_S

看一下xidel。到那里将花费您95%的时间xidel -s input -e '/'
Josh Habdas,

Answers:


245

您可以使用一个简单的正则表达式,如下所示:

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

请注意,此解决方案有其自身的缺陷。请参阅删除字符串中的HTML标签更多信息,(尤其是@mehaase的注释)。

另一个解决方案是使用HTML Agility Pack
您可以在下面的库中找到示例:HTML敏捷包-删除不需要的标签而不删除内容?


2
用于输入不工作: '7 <10的<b>但</ B> 30> 10'它给出: '7,但30> 10'
的Bartosz Pierzchlewicz

是的,因为这条之间的一切<和>,所以你的情况,< 10 <b></b>都剥离。
Bidou

2
由于方法名称应使用Pascal大小写,因此方法名称不应该为StripHtml()吗?
David Klempfner

如果出于安全原因使用正则表达式,则可能不是一个好主意。
Mathias Lykkegaard Lorenzen

3
只需将正则表达式更改为<[a-zA-Z /] *?>
Brandon Prudent

54

您可以使用HTML Agility Pack解析字符串并获取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;

我喜欢该InnerText解决方案,因为它可以删除所有标签。但是...它留下了&nbsp;,还留下了注释标签,例如<!-- xxx --> 周围的那些标签v:shapetypev:shapev:imagedata带有[if gte vml 1][if !vml]
Thierry_S

7
我意识到这&nbsp;是一个html实体,而不是一个标签,因此result = WebUtility.HtmlDecode(result);,使用Html Agility Pack 可以解决该问题,并删除注释节点:htmlDoc.DocumentNode.SelectNodes("//comment()")?.ForEach(c=> c.Remove());在做之前result = htmlDoc.DocumentNode.InnerText;
Thierry_S

3

您可以在字符串上使用以下代码,并且将获得不带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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.