熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

正則表達式刪除指定的HTML 標簽

2013-11-15 12:51:07  來源: ASP編程 

  抓取某網頁的數據後(比如描述)如果照原樣顯示的話可能會因為它裡面包含沒有閉合的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 = stringFormat(@<(?!((/?\s?{})))[^>]+> stringJoin(@)|(/?\s? holdTags));

  Regex reg = new Regex(regStr RegexOptionsCompiled | RegexOptionsMultiline | RegexOptionsIgnoreCase);

  return regReplace(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 = stringFormat(@<(?!((/?\s?{})))[^>]+> stringJoin(@\b)|(/?\s? holdTags));

  Regex reg = new Regex(regStr RegexOptionsCompiled | RegexOptionsMultiline | RegexOptionsIgnoreCase);

  return regReplace(ctx );

  }


From:http://tw.wingwit.com/Article/program/ASP/201311/21752.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.