删除HTML中的样式标记

时间:2013-10-12 11:05:52

标签: c# html regex

我需要完全删除给定HTML代码的所有样式标记。我发现以下正则表达式匹配XML中的整个样式标记。它适用于在线正则表达式测试人员中给定的Html代码。

*style\s*=\s*('|")[^\2]*?\2([^>]*)*

但是,通过C#代码,它不适用于给定的HTML。

以下是C#代码:

Regex regex = new Regex("style\\s*=\\s*('|\")[^\\2]*?\\2([^>]*)", RegexOptions.IgnoreCase);

2 个答案:

答案 0 :(得分:5)

正则表达式应该是

 style\s*=\s*('|")[^\1]*\1

虽然我会使用Htmlagilitypack

   HtmlDocument doc = new HtmlDocument();
   doc.Load(yourStream);
   var elementsWithStyleAttribute = doc.DocumentNode.SelectNodes("//@style");
   foreach (var element in elementsWithStyleAttribute)
   {
       element.Attributes["style"].Remove();
   }
   doc.Save();

答案 1 :(得分:2)

我通常使用以下代码从Outlook邮件中删除内联样式,类,图像和注释,然后将其保存到数据库中:

desc = Regex.Replace(desc, "(<style.+?</style>)|(<script.+?</script>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
desc = Regex.Replace(desc, "(<img.+?>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
desc = Regex.Replace(desc, "(<o:.+?</o:.+?>)", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
desc = Regex.Replace(desc, "<!--.+?-->", "", RegexOptions.IgnoreCase | RegexOptions.Singleline);
desc = Regex.Replace(desc, "class=.+?>", ">", RegexOptions.IgnoreCase | RegexOptions.Singleline);
desc = Regex.Replace(desc, "class=.+?\s", " ", RegexOptions.IgnoreCase | RegexOptions.Singleline);