为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2019-06-26 13:37:25
使用C#正则表达式删除HTML标记如何使用C#正则表达式替换/删除所有HTML标记,包括尖括号?谁能帮我弄一下密码吗?
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

如前所述,不应使用正则表达式处理XML或HTML文档。它们在HTML和XML文档中的性能不太好,因为无法以一般的方式表示嵌套结构。

你可以用以下方法。

String result = Regex.Replace(htmlDocument, @"<[^>]*>", String.Empty);

这在大多数情况下都是可行的,但也会出现一些情况(例如,包含尖括号的CDATA),这些情况不能像预期的那样工作。


查看完整回答
反对 回复 2019-06-26
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

这个问题太宽泛了,无法确定地回答。你是说从一个真实的HTML文档中删除所有标签,就像网页一样?如果是这样,你必须:

  • 删除<!DOCTYPE声明或<?xml Prolog(如果它们存在)
  • 删除所有SGML注释
  • 删除整个Head元素
  • 删除所有脚本和样式元素
  • Grabthar-知道用表单和表元素做什么吗?
  • 移除其余的标签
  • 从CDATA节中删除<![CDATA[和]>序列,但将其内容单独保留

这只是我的头顶-我相信还有更多。一旦你完成了所有这些,你最终会得到一些地方的单词、句子和段落,而另一些地方则会出现大量无用的空格。

但是,假设您只使用一个片段,并且只需删除所有标记即可,下面是我将使用的正则表达式:

@"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>"

在自己的选项中匹配单引号和双引号字符串足以解决属性值中的尖括号问题。我不认为有任何必要显式匹配标记中的属性名称和其他内容,就像Ryan的答案中的正则表达式那样;第一个选项处理了所有这些。

如果你想知道这些(?>...)构造,它们是原子群..它们使正则表达式更高效,但更重要的是,它们防止了失控的回溯,这是您在混合交替和嵌套量词时应该注意的事情,就像我所做的那样。我不认为这会是一个问题,但我知道如果我不提,其他人会。;-)

当然,这个正则表达式并不完美,但它可能是您所需要的最好的。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 759 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信