首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用C#正则表达式删除HTML标记

使用C#正则表达式删除HTML标记
EN

Stack Overflow用户
提问于 2009-04-25 00:23:11
回答 9查看 215.4K关注 0票数 143

如何使用HTML正则表达式替换/删除所有C#标记,包括尖括号?有没有人能帮我弄一下代码?

EN

回答 9

Stack Overflow用户

发布于 2009-04-25 00:31:48

如前所述,您不应该使用正则表达式来处理XML或HTML文档。它们在HTML和XML文档中的表现不是很好,因为没有办法以通用的方式表达嵌套结构。

您可以使用以下代码。

代码语言:javascript
复制
String result = Regex.Replace(htmlDocument, @"<[^>]*>", String.Empty);

这将适用于大多数情况,但也会有一些情况(例如,包含尖括号的CDATA )不会像预期的那样工作。

票数 168
EN

Stack Overflow用户

发布于 2009-04-25 00:51:45

正确的答案是不要这样做,使用HTML Agility Pack

编辑后添加:

为了厚颜无耻地窃取jesse下面的评论,并避免被指责在这么长时间后没有充分回答这个问题,这里有一个使用HTML Agility Pack的简单、可靠的代码片段,它甚至可以与最不完美、反复无常的HTML一起工作:

代码语言:javascript
复制
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黑客攻击。

票数 82
EN

Stack Overflow用户

发布于 2009-04-25 00:31:08

代码语言:javascript
复制
Regex regex = new Regex(@"</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>", RegexOptions.Singleline);

Source

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/787932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档