我需要在特定位置删除Word HTML标记。目前我正在这样做:
public string CleanWordStyle(string html)
{
StringCollection sc = new StringCollection();
sc.Add(@"<table\b[^>]*>(.*?)</table>");
sc.Add(@"(<o:|</o:)[^>]+>");
sc.Add(@"(<v:|</v:)[^>]+>");
sc.Add(@"(<st1:|</st1:)[^>]+>");
sc.Add(@"(mso-bidi-|mso-fareast|mso-spacerun:|mso-list: ign|mso-ascii|mso-hansi|mso-ansi|mso-element|mso-special|mso-highlight|mso-border|mso-yfti|mso-padding|mso-background|mso-tab|mso-width|mso-height|mso-pagination|mso-theme|mso-outline)[^;]+;");
sc.Add(@"(font-size|font-family):[^;]+;");
sc.Add(@"font:[^;]+;");
sc.Add(@"line-height:[^;]+;");
sc.Add(@"class=""mso[^""]+""");
sc.Add(@"times new roman","serif";");
sc.Add(@"verdana","sans-serif";");
sc.Add(@"<p> </p>");
sc.Add(@"<p> </p>");
foreach (string s in sc)
{
html = Regex.Replace(html, s, "", RegexOptions.IgnoreCase);
}
html = Regex.Replace(html, @" ", @" "); //can not be read by as XmlDocument if not!
return html;
}
现在我正在使用<p>
剥离sc.Add(@"<p> </p>");
标记的整个HTML,但我想要的是:如果我点击表标记,它应该停止替换,直到它到达表结束标记。可能吗?
答案 0 :(得分:0)
正则表达式可用于一行或非常简单的html结构。
如果您真的想要使用最少的代码,请从http://htmlagilitypack.codeplex.com/获取HTMLAgilityPack,并从所有标记的内部值中获取所有文本。
它很简单:
public string CleanWordStyle(string htmlPage)
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlPage);
return doc.DocumentNode.InnerText;
}