在HTML中移除样式标签

5
我需要完全删除给定HTML代码中的所有样式标签。我找到了以下正则表达式来匹配XML中的整个样式标签。在在线正则表达式测试器中,它对于给定的HTML代码有效。
*style\s*=\s*('|")[^\2]*?\2([^>]*)*

然而,通过C#代码并不能对给定的HTML进行操作。

以下是C#代码:

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

DOM解析器可能更适合这项任务。也许可以尝试使用HTML敏捷包?http://htmlagilitypack.codeplex.com - David
请查看以下链接,看看是否有帮助:https://dev59.com/J3RA5IYBdhLWcg3w6SNH? - Rahul Tripathi
你不能在字符类中使用反向引用。 - Casimir et Hippolyte
2个回答

8

我通常使用以下代码来从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);

2
请不要在多个问题中添加相同的答案。请回答最好的一个,并将其余的标记为重复。请参见是否可以在多个问题中添加重复答案? - Bhargav Rao

7

正则表达式应该是:

 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();

修改后的正则表达式不起作用。我只需要删除样式属性。 - Dimax
@Dimax,请展示你正在使用的确切代码以替换,并提供一个HTML示例。 - Anirudha
以下是代码:Regex regex = new Regex("style\s*=\s*('|")[^\2]?\2([^>])", RegexOptions.Multiline | RegexOptions.IgnoreCase);htmldoc.Content = regex.Replace(htmldoc.Content, string.Empty);示例 Html 代码:<P style="MARGIN: 0in 0in 0pt 0.5in" class="MsoNormal"> <SPAN style="FONT-FAMILY: 'Tw Cen MT Condensed Extra Bold'; COLOR: black; FONT-SIZE: 16pt; mso-bidi-font-family: Arial"> 有许多应用程序</SPAN></P> - Dimax
@Dimax,你没有在答案中使用正则表达式。 - Anirudha
嗨,Anirudh,抱歉耽搁了。我使用了HtmlAgilityPack做了同样的事情。感谢你提供的示例代码。 - Dimax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接