正则表达式删除指定的HTML 标签

 抓取某网页的数据后(比如描述),如果照原样显示的话,可能会因为它里面包含没有闭合的HTML标签而打乱了格式,也可能它里面用了比较让人 "费解" 的HTML标签,把预订的格式搅乱. 如果全盘删除里面的 HTML 标签,可能会造成阅读上的困难(比如 a, img 这些标签), 最好是删除一部分,保留一部分.

  正则表达式里,判断 包含某些字符串 是非常容易理解的,但是如何判断 不包含某些字符串 (是字符串,不是字符,是某些,不是某个) 确实是个费解的事.

  <(?!((/?s?li)|(/?s?ul)|(/?s?a)|(/?s?img)|(/?s?br)|(/?s?span)|(/?s?b)))[^>]+>

  这个正则是判断HTML标签不包含 li / ul / a / img / br / span / b 的,就上面的要求来说,是要 删除 除这里列出的HTML标签,这也是我摸索了很长时间才搞出来的.

  (?!exp) 匹配后面跟的不是exp的位置

  /?s? 我一开始试着把它写到最前面的 < 后面,但是测试失败了.

  下面是一个简单的函数,把要保留的TAG串起来,生成一个正则表达式,然后把不需要的TAG删除...

  private static string RemoveSpecifyHtml(string ctx) {

  string[] holdTags = { "a", "img", "br", "strong", "b", "span" };//要保留的 tag

  // <(?!((/?s?li)|(/?s?ul)|(/?s?a)|(/?s?img)|(/?s?br)|(/?s?span)|(/?s?b)))[^>]+>

  string regStr = string.Format(@"<(?!((/?s?{0})))[^>]+>", string.Join(@")|(/?s?", holdTags));

  Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);

  return reg.Replace(ctx, "");

  }

  ----------------------------

  修正:

  上面的正则,如果保留了 li , 实际运行会发现 link 也给保留下来了, 保留 a 会把 addr 也给保留下来, 解决办法就是加 b 断言.

  <(?!((/?s?lib)|(/?s?ul)|(/?s?ab)|(/?s?imgb)|(/?s?brb)|(/?s?spanb)|(/?s?bb)))[^>]+>

  private static string RemoveSpecifyHtml(string ctx) {

  string[] holdTags = { "a", "img", "br", "strong", "b", "span", "li" };//保留的 tag

  // <(?!((/?s?lib)|(/?s?ulb)|(/?s?ab)|(/?s?imgb)|(/?s?brb)|(/?s?spanb)|(/?s?bb)))[^>]+>

  string regStr = string.Format(@"<(?!((/?s?{0})))[^>]+>", string.Join(@"b)|(/?s?", holdTags));

  Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);

  return reg.Replace(ctx, "");

  }

时间: 2024-10-18 13:22:12

正则表达式删除指定的HTML 标签的相关文章

asp.net正则表达式删除指定的HTML标签的代码

如果全盘删除里面的 HTML 标签,可能会造成阅读上的困难(比如 a, img 这些标签), 最好是删除一部分,保留一部分. 正则表达式里,判断 包含某些字符串 是非常容易理解的,但是如何判断 不包含某些字符串 (是字符串,不是字符,是某些,不是某个) 确实是个费解的事. 复制代码 代码如下: <(?!((/?\s?li)(/?\s?ul)(/?\s?a)(/?\s?img)(/?\s?br)(/?\s?span)(/?\s?b)))[^>]+> 这个正则是判断HTML标签不包含 li

asp.net正则表达式删除指定的HTML标签的代码_实用技巧

如果全盘删除里面的 HTML 标签,可能会造成阅读上的困难(比如 a, img 这些标签), 最好是删除一部分,保留一部分. 正则表达式里,判断 包含某些字符串 是非常容易理解的,但是如何判断 不包含某些字符串 (是字符串,不是字符,是某些,不是某个) 确实是个费解的事. 复制代码 代码如下: <(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+> 这个正则是判断HTML标签不

android通过后台接口获取的html如何用一正则表达式删除末尾的换行标签

问题描述 android通过后台接口获取的html如何用一正则表达式删除末尾的换行标签 从接口返回到客户端的html内容里有时会在内容的末尾有多个回车(br标签).导致客户端在显示时,底部拉了一大段空白.我希望在把内容显示之前将末尾的br全部去掉.目前想到采用正则表达式来做,但是写来写去总写不对.希望高手帮忙. 解决方案 你可以直接用replace吗,替换掉br为空

jquery删除指定的html标签并保留标签内文本内容的方法

 有时我们希望删除这段html代码里面的一对<p>标签,但是要保持里面的内容不被删除,本文提供的这个jquery方法就可以简单实现.   例如有这样一段html代码:    代码如下:脚本之家演示代码   <p>大家好,欢迎来到jb51.net</p>   这里为大家提供最优秀的<a href="http://www.jb51.net/js">js</a>代码和教程       我们希望删除这段html代码里面的一对<p

jquery删除指定的html标签并保留标签内文本内容的方法_jquery

例如有这样一段html代码: 复制代码 代码如下: 演示代码  <p>大家好,欢迎来到jb51.net</p>  这里为大家提供最优秀的<a href="http://www.jb51.net/js">js</a>代码和教程  我们希望删除这段html代码里面的一对<p>标签,但是要保持里面的内容不被删除,这里我们用jquery处理,详细的jQuery代码: 复制代码 代码如下: <script type="t

php 去掉指定的html标签及内容

string strip_tags ( string str [, string allowable_tags] ) 弊端 : 这个函数只能保留想要的html标签,就是参数string allowable_tags. 在yizero的评论中我知道了这个函数的参数allowable_tags的其他的用法.  代码如下 复制代码 strip_tags($source, "); 去掉所以的html标签. strip_tags($source, '<div><img><em

asp.net 正则替换html标签与删除指定字符方法

asp教程.net 正则替换html标签与删除指定字符方法,使用了正则表达式进行规则过滤,由于html标记都是基于<>这种格式,而且还有类似 这样的符号,所以分了2次处理将字符串处理为无html格式的字符串.   public string NoHtml(string html) {     string StrNohtml = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>", &q

jQuery添加和删除指定标签的方法_jquery

jQuery如何为指定标签添加和删除一个样式: 在网页的实际应用中,需要根据不同的条件来改变元素的CSS样式,通过动态的给元素添加删除一个CSS类可以实现此功能,下面通过实例来介绍一下如何实现此种功能.一.使用addClass()和removeClass()添加和删除一个CSS类: 代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name=&qu

xcode-在iPhoneSDK中删除指定HTML标签

问题描述 在iPhoneSDK中删除指定HTML标签 应用中的NSString中包含HTML,我想删除< img src=..../>标签的内容. 举个例子: Source = < p>< a href="http://wpcore.mpf.s3.amazonaws.com/wp-content/uploads/2012/12/thumbs_img_0500.jpg">**< img class="alignleft size-ful