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

    1.抓取某网页的数据后(比如描述),如果照原样显示的话,可能会因为它里面包含没有闭合的HTML标签而打乱了格式,也可能它里面用了比较让人 "费解" 的HTML标签,把预订的格式搅乱. 如果全盘删除里面的 HTML 标签,可能会造成阅读上的困难(比如 a, img 这些标签), 最好是删除一部分,保留一部分.
    下面是一个简单的函数,把要保留的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?li\b)|(/?\s?ul)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+>
     
     
            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, "");
            }
     
        public static string[] GetImgUrlList(string html)

    {
    // 定义正则表达式用来匹配 img 标签
    Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
    // 搜索匹配的字符串
    MatchCollection matches = regImg.Matches(html);
    int i = 0;
    string[] sUrlList = new string[matches.Count];

    // 取得匹配项列表
    foreach (Match match in matches)
    sUrlList[i++] = match.Groups["imgUrl"].Value;
    return sUrlList;
    }

     
  • 相关阅读:
    devenv.exe与devenv.com
    [LeetCode 132] 回文分割II(Palindrome Partitioning II)
    [翻译]More C++ Idioms 取址器(Address of)
    [LeetCode 131] 回文分割(Palindrome Partitioning)
    [翻译]More C++ Idioms 类成员检测器
    C++类的隐式默认构造函数
    [翻译]More C++ Idioms 通过初始化挂接(Attach by Initialization)
    【转】来自微软的纯CSS下拉菜单
    引用asp.net母版页后,母版页和内容页的页面事件执行顺序
    如何解决无法显示隐藏文件/文件夹
  • 原文地址:https://www.cnblogs.com/yuxia/p/3197602.html
Copyright © 2011-2022 走看看