我需要完全删除给定HTML代码的所有样式标记。我发现以下正则表达式匹配XML中的整个样式标记。它适用于在线正则表达式测试人员中给定的Html代码。
*style\s*=\s*('|")[^\2]*?\2([^>]*)*
但是,通过C#代码,它不适用于给定的HTML。
以下是C#代码:
Regex regex = new Regex("style\\s*=\\s*('|\")[^\\2]*?\\2([^>]*)", RegexOptions.IgnoreCase);
答案 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);