1. 程式人生 > >Python通過正則表示式獲取,去除(過濾)或者替換HTML標籤的幾種方法(本文由169it.com蒐集整理)

Python通過正則表示式獲取,去除(過濾)或者替換HTML標籤的幾種方法(本文由169it.com蒐集整理)

python正則表示式關鍵內容:

python正則表示式轉義符:

. 匹配除換行符以外的任意字元
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字串的開始
$ 匹配字串的結束
\W 匹配任意不是字母,數字,下劃線,漢字的字元
\S 匹配任意不是空白符的字元
\D 匹配任意非數字的字元
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字元
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元

關於python正則表示式命名組:

命名組:(?P<name>.....)
這篇文章裡面還提到了界定( 問號開頭,前向則有個'<'號,非則有個'!' 號 ):
前向界定 (?<=…)
後向界定 (?=…)  
前向非界定 (?<!....)
後向非界定 (?!.....)


常用的python正則表示式限定符程式碼/語法說明:

*重複零次或更多次
+重複一次或更多次
?重複零次或一次
{n}重複n次
{n,}重複n次或更多次
{n,m}重複n到m次

Python通過正則表示式獲取,去除(過濾)或者替換HTML標籤程式碼舉例

Python通過正則表示式取html中天氣資訊程式碼示例:

#!/usr/bin/env python  
#-*- coding: utf8 -*-  
import re 
   
html = """ 
    <h2>多雲</h2> 
"""  
   
if __name__ == '__main__':  
    p = re.compile('<[^>]+>')  
    print p.sub("", html)

Python通過正則表示式取html中溫度資訊程式碼示例:

#!/usr/bin/env python  
#-*- coding: utf8 -*-  
import re  
   
html = """ 
    <div class="w-number"> <span class="tpte">14℃</span> </div> 
"""  
   
if __name__ == '__main__':  
    p = re.compile('<[^>]+>')  
    print p.sub("", html)

Python通過正則表示式去除(過濾)HTML標籤示例程式碼:

# -*- coding: utf-8-*-
import re
##過濾HTML中的標籤
#將HTML中標籤等資訊去掉
#@param htmlstr HTML字串.
def filter_tags(htmlstr):
    #先過濾CDATA
    re_cdata=re.compile('//<!\[CDATA\[[^>]*//\]\]>',re.I) #匹配CDATA
    re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script
    re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I)#style
    re_br=re.compile('<br\s*?/?>')#處理換行
    re_h=re.compile('</?\w+[^>]*>')#HTML標籤
    re_comment=re.compile('<!--[^>]*-->')#HTML註釋
    s=re_cdata.sub('',htmlstr)#去掉CDATA
    s=re_script.sub('',s) #去掉SCRIPT
    s=re_style.sub('',s)#去掉style
    s=re_br.sub('\n',s)#將br轉換為換行
    s=re_h.sub('',s) #去掉HTML 標籤
    s=re_comment.sub('',s)#去掉HTML註釋
    #去掉多餘的空行
    blank_line=re.compile('\n+')
    s=blank_line.sub('\n',s)
    s=replaceCharEntity(s)#替換實體
    return s
##替換常用HTML字元實體.
#使用正常的字元替換HTML中特殊的字元實體.
#你可以新增新的實體字元到CHAR_ENTITIES中,處理更多HTML字元實體.
#@param htmlstr HTML字串.
def replaceCharEntity(htmlstr):
    CHAR_ENTITIES={'nbsp':' ','160':' ',
                'lt':'<','60':'<',
                'gt':'>','62':'>',
                'amp':'&','38':'&',
                'quot':'"','34':'"',}
     
    re_charEntity=re.compile(r'&#?(?P<name>\w+);')
    sz=re_charEntity.search(htmlstr)
    while sz:
        entity=sz.group()#entity全稱,如>
        key=sz.group('name')#去除&;後entity,如>為gt
        try:
            htmlstr=re_charEntity.sub(CHAR_ENTITIES[key],htmlstr,1)
            sz=re_charEntity.search(htmlstr)
        except KeyError:
            #以空串代替
            htmlstr=re_charEntity.sub('',htmlstr,1)
            sz=re_charEntity.search(htmlstr)
    return htmlstr
def repalce(s,re_exp,repl_string):
    return re_exp.sub(repl_string,s)
if __name__=='__main__':
    s=file('169it.com_index.htm').read()
    news=filter_tags(s)
    print news