如何在不知道字符串中有哪些标记的情况下删除字符串中的所有HTML标记
本文关键字:字符串 情况下 标记 删除 HTML 不知道 | 更新日期: 2023-09-27 18:27:09
有什么简单的方法可以从字符串中删除所有HTML标记或任何与HTML相关的内容吗?
例如:
string title = "<b> Hulk Hogan's Celebrity Championship Wrestling <font color='"#228b22'">[Proj # 206010]</font></b> (Reality Series, )"
以上应该是:
"胡尔克霍根的名人锦标赛摔跤[Proj#206010](真人秀系列)"
您可以使用这样一个简单的正则表达式:
public static string StripHTML(string input)
{
return Regex.Replace(input, "<.*?>", String.Empty);
}
请注意,此解决方案有其自身的缺陷有关更多信息(尤其是"Mark E.Haase"/@mehaase的注释),请参阅字符串中的删除HTML标记
另一个解决方案是使用HTML敏捷包
你可以在这里找到一个使用该库的例子:HTML敏捷包-在不删除内容的情况下删除不需要的标签?
您可以使用Html敏捷包解析字符串并获取InnerText。
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(@"<b> Hulk Hogan's Celebrity Championship Wrestling <font color='"#228b22'">[Proj # 206010]</font></b> (Reality Series, )");
string result = htmlDoc.DocumentNode.InnerText;
您可以在字符串上使用以下代码,您将获得不包含html部分的完整字符串。
string title = "<b> Hulk Hogan's Celebrity Championship Wrestling <font color='"#228b22'">[Proj # 206010]</font></b> (Reality Series, )".Replace(" ",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);
}