zoukankan      html  css  js  c++  java
  • asp.net正则表达式删除指定的HTML标签的代码

    抓取某网页的数据后(比如描述),如果照原样显示的话,可能会因为它里面包含没有闭合的HTML标签而打乱了格式,也可能它里面用了比较让人 费解 的HTML标签,把预订的格式搅乱.

     如果全盘删除里面的 HTML 标签,可能会造成阅读上的困难(比如 a, img 这些标签), 最好是删除一部分,保留一部分. 
    这个正则是判断HTML标签不包含 li / ul / a / img / br / span / b 的,就上面的要求来说,是要 删除 除这里列出的HTML标签,这也是我摸索了很长时间才搞出来的. 
    (?!exp) 匹配后面跟的不是exp的位置 
    /?s? 我一开始试着把它写到最前面的 < 后面,但是测试失败了. 

    下面是一个简单的函数,把要保留的TAG串起来,生成一个正则表达式,然后把不需要的TAG删除... 
    正则表达式里,判断 包含某些字符串 是非常容易理解的,但是如何判断 不包含某些字符串 (是字符串,不是字符,是某些,不是某个) 确实是个费解的事. 

    <(?!((/?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, ""); 
    }

    这个正则是判断HTML标签不包含 li / ul / a / img / br / span / b 的,就上面的要求来说,是要 删除 除这里列出的HTML标签,这也是我摸索了很长时间才搞出来的. 
    (?!exp) 匹配后面跟的不是exp的位置 
    /?s? 我一开始试着把它写到最前面的 < 后面,但是测试失败了. 

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

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

    private static string RemoveSpecifyHtml(string ctx) { 
    string[] holdTags = { "a", "img", "br", "strong", "b", "span", "li" };//保留的 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, ""); 

  • 相关阅读:
    meanshift聚类的实现
    birch聚类算法
    DBSCAN聚类算法的实现
    discrete adaboost的C++实现
    kd-tree的实现
    红黑树的实现——插入
    24位位图转8位灰度图
    将RGB数据写入BMP位图文件
    splay树的实现
    AVL树的实现
  • 原文地址:https://www.cnblogs.com/sjqq/p/6428202.html
Copyright © 2011-2022 走看看