Python正規表現でHTMLタグをフィルタまたは置換する方法
2701 ワード
python正規表現のキー:
python正規表現エスケープ:
・改行文字以外の任意の文字を一致させるwアルファベットまたは数字または下線または漢字を一致させるs任意の空白文字を一致させるd数字を一致させるb単語の開始または終了を一致させる^文字列の開始を一致させる$文字列の終了を一致させるW任意のアルファベット、数字、下線を一致させる漢字の文字Sは任意の空白文字ではない文字Dは任意の非数字の文字Bは単語の先頭または終了の位置ではない[^x]はx以外の任意の文字に一致する
[^aeiou]aeiouというアルファベット以外の任意の文字に一致します
一般的なpython正規表現修飾子コード/構文説明:
*0回以上+1回以上繰り返しますか?0回または1回{n}n回{n,}n回以上{n,m}nからm回繰り返しpython正規表現命名グループについて:命名グループ:(?P.....)この文章では、定義(疑問符の先頭に、前方には「前方定義(?<=...)後方定義(?=...)前方非定義(?後方非定義(?!……)についても言及している.
Python正規表現によるHTMLタグサンプルコードの除去(フィルタリング)
python正規表現エスケープ:
・改行文字以外の任意の文字を一致させるwアルファベットまたは数字または下線または漢字を一致させるs任意の空白文字を一致させるd数字を一致させるb単語の開始または終了を一致させる^文字列の開始を一致させる$文字列の終了を一致させるW任意のアルファベット、数字、下線を一致させる漢字の文字Sは任意の空白文字ではない文字Dは任意の非数字の文字Bは単語の先頭または終了の位置ではない[^x]はx以外の任意の文字に一致する
[^aeiou]aeiouというアルファベット以外の任意の文字に一致します
一般的なpython正規表現修飾子コード/構文説明:
*0回以上+1回以上繰り返しますか?0回または1回{n}n回{n,}n回以上{n,m}nからm回繰り返しpython正規表現命名グループについて:命名グループ:(?P.....)この文章では、定義(疑問符の先頭に、前方には「前方定義(?<=...)後方定義(?=...)前方非定義(?後方非定義(?!……)についても言及している.
Python正規表現によるHTMLタグサンプルコードの除去(フィルタリング)
#-*- coding:utf-8 -*-
import re
## HTML
# HTML
# @param htmlstr HTML .
def filter_tags(htmlstr):
# CDATA
re_cdata = re.compile("//]*//\]\]>", re.I) # CDATA
re_script = re.compile(']*>[^', re.I) # Script
re_style = re.compile(']*>[^', re.I) # style
re_br = re.compile('
') #
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('
', s) # br
s = re_h.sub('', s) # HTML
s = re_comment.sub('', s) # HTML
#
blank_line = re.compile('
+')
s = blank_line.sub('
', s)
s = replaceCharEntity(s) #
return s
## HTML .
# HTML .
# CHAR_ENTITIES , HTML .
# @param htmlstr HTML .
def replaceCharEntity(htmlstr):
CHAR_ENTITIES = {'nbsp': ' ', '160': ' ',
'lt': '', '62': '>',
'amp': '&', '38': '&',
'quot': '"', '34': '"', }
re_charEntity = re.compile(r'?(?P\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('test.html').read()
news = filter_tags(s)
print news