如何使用HTML正则表达式替换/删除所有C#标记,包括尖括号?有没有人能帮我弄一下代码?
发布于 2009-04-25 00:31:48
如前所述,您不应该使用正则表达式来处理XML或HTML文档。它们在HTML和XML文档中的表现不是很好,因为没有办法以通用的方式表达嵌套结构。
您可以使用以下代码。
String result = Regex.Replace(htmlDocument, @"<[^>]*>", String.Empty);
这将适用于大多数情况,但也会有一些情况(例如,包含尖括号的CDATA )不会像预期的那样工作。
发布于 2009-04-25 00:51:45
正确的答案是不要这样做,使用HTML Agility Pack。
编辑后添加:
为了厚颜无耻地窃取jesse下面的评论,并避免被指责在这么长时间后没有充分回答这个问题,这里有一个使用HTML Agility Pack的简单、可靠的代码片段,它甚至可以与最不完美、反复无常的HTML一起工作:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(Properties.Resources.HtmlContents);
var text = doc.DocumentNode.SelectNodes("//body//text()").Select(node => node.InnerText);
StringBuilder output = new StringBuilder();
foreach (string line in text)
{
output.AppendLine(line);
}
string textOnly = HttpUtility.HtmlDecode(output.ToString());
使用正则表达式解析HTML的情况很少,因为没有上下文感知就无法正确解析HTML,即使在非传统的正则表达式引擎中提供上下文感知也是非常痛苦的。您可以使用RegEx进行部分验证,但您需要进行手动验证。
Html Agility Pack可以为您提供一个健壮的解决方案,它将减少手动修复异常的需要,这些异常可能是由于天真地将HTML视为上下文无关语法而导致的。
正则表达式在大多数情况下可能会得到您想要的结果,但在非常常见的情况下它会失败。如果你能找到一个比HTML Agility Pack更好/更快的解析器,那就去做吧,但请不要让世界遭受更多的HTML黑客攻击。
发布于 2009-04-25 00:31:08
Regex regex = new Regex(@"</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>", RegexOptions.Singleline);
https://stackoverflow.com/questions/787932
复制相似问题