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

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

以上内容实际上应该是:

“绿巨人霍根的名人摔跤锦标赛[ Proj # 206010](现实系列)”

265213 次浏览

您可以像下面这样使用一个简单的正则表达式:

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

请注意,这种解决方案有其自身的缺陷。更多信息请参见 删除字符串中的 HTML 标记(特别是‘ Mark E. Haase’/@mehaase 的评论)

另一种解决方案是使用 HTML 敏捷包
你可以在这里找到一个使用这个库的例子: < a href = “ https://stackoverflo.com/questions/12787449/HTML-agility-pack- 移除不想要的標記-without-delete-content”> HTML 敏捷性 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;

您可以使用下面的代码对您的字符串,您将获得没有 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);

我构建了一个小函数来删除 HTML 标记。

public static string RemoveHtmlTags(string text)
{
List<int> openTagIndexes = Regex.Matches(text, "<").Cast<Match>().Select(m => m.Index).ToList();
List<int> closeTagIndexes = Regex.Matches(text, ">").Cast<Match>().Select(m => m.Index).ToList();
if (closeTagIndexes.Count > 0)
{
StringBuilder sb = new StringBuilder();
int previousIndex = 0;
foreach (int closeTagIndex in closeTagIndexes)
{
var openTagsSubset = openTagIndexes.Where(x => x >= previousIndex && x < closeTagIndex);
if (openTagsSubset.Count() > 0 && closeTagIndex - openTagsSubset.Max() > 1 )
{
sb.Append(text.Substring(previousIndex, openTagsSubset.Max() - previousIndex));
}
else
{
sb.Append(text.Substring(previousIndex, closeTagIndex - previousIndex + 1));
}
previousIndex = closeTagIndex + 1;
}
if (closeTagIndexes.Max() < text.Length)
{
sb.Append(text.Substring(closeTagIndexes.Max() + 1));
}
return sb.ToString();
}
else
{
return text;
}
}
public static string StripHTML(string input)
{
if (input==null)
{
return string.Empty;
}
return Regex.Replace(input, "<.*?>", String.Empty);


}