zoukankan      html  css  js  c++  java
  • 利用正则表达式去掉网页中的HTML 标签

    利用正则表达式去掉网页中的HTML 标签
    正则表达式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删除...

    C#代码 
      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, "");  
     
      } 

      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?li\b)|(/?\s?ul)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+>

    C#代码 
      private static string RemoveSpecifyHtml(string ctx) {  
     
      string[] holdTags = { "a", "img", "br", "strong", "b", "span", "li" };//保留的 tag  
     
      // <(?!((/?\s?li\b)|(/?\s?ul\b)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+>  
     
      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, "");  
     
      } 

  • 相关阅读:
    Swift入门篇-Hello World
    Swift入门篇-swift简介
    Minecraft 插件 world edit 的cs 命令
    搭建本地MAVEN NEXUS 服务
    MC java 远程调试 plugin 开发
    企业内部从零开始安装docker hadoop 提纲
    javascript 命令方式 测试例子
    ca des key crt scr
    JSF 抽象和实现例子 (函数和属性)
    form 上传 html 代码
  • 原文地址:https://www.cnblogs.com/jcomet/p/2125131.html
Copyright © 2011-2022 走看看