4

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

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

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

以下是 C# 代码:

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

2 回答 2

6

正则表达式应该是

 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();
于 2013-10-12T11:11:18.210 回答
5

在将 Outlook 消息保存到数据库之前,我通常使用以下代码从 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);
于 2016-05-15T08:31:39.433 回答