ホームページ >バックエンド開発 >Python チュートリアル >Python が正規表現を使用して HTML タグをフィルタリングまたは置換する方法の概要

Python が正規表現を使用して HTML タグをフィルタリングまたは置換する方法の概要

巴扎黑
巴扎黑オリジナル
2017-09-26 10:36:022740ブラウズ

この記事では、Python の正規表現を使用して HTML タグをフィルタリングまたは置換する方法を主に紹介し、Python の正規表現関連の構文を簡単に紹介し、Python の正規表現ベースの HTML タグのフィルタリングおよび置換関連の操作テクニックを具体的な例に基づいて分析します。必須 お友達は参照してください

この記事では、Python が正規表現を使用して HTML タグをフィルターまたは置換する方法について説明します。参考として、次のようにみんなと共有してください:

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< ;name> ....)
この記事では区切りについても触れています (疑問符で始まり、前方の場合は「<」記号があり、そうでない場合は「!」記号があります):
前方区切り (?< ) 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(&#39;<\s*script[^>]*>[^<]*<\s*/\s*script\s*>&#39;, re.I) # Script
  re_style = re.compile(&#39;<\s*style[^>]*>[^<]*<\s*/\s*style\s*>&#39;, re.I) # style
  re_br = re.compile(&#39;<br\s*?/?>&#39;) # 处理换行
  re_h = re.compile(&#39;</?\w+[^>]*>&#39;) # HTML标签
  re_comment = re.compile(&#39;<!--[^>]*-->&#39;) # HTML注释
  s = re_cdata.sub(&#39;&#39;, htmlstr) # 去掉CDATA
  s = re_script.sub(&#39;&#39;, s) # 去掉SCRIPT
  s = re_style.sub(&#39;&#39;, s) # 去掉style
  s = re_br.sub(&#39;\n&#39;, s) # 将br转换为换行
  s = re_h.sub(&#39;&#39;, s) # 去掉HTML 标签
  s = re_comment.sub(&#39;&#39;, s) # 去掉HTML注释
  # 去掉多余的空行
  blank_line = re.compile(&#39;\n+&#39;)
  s = blank_line.sub(&#39;\n&#39;, s)
  s = replaceCharEntity(s) # 替换实体
  return s
##替换常用HTML字符实体.
# 使用正常的字符替换HTML中特殊的字符实体.
# 你可以添加新的实体字符到CHAR_ENTITIES中,处理更多HTML字符实体.
# @param htmlstr HTML字符串.
def replaceCharEntity(htmlstr):
  CHAR_ENTITIES = {&#39;nbsp&#39;: &#39; &#39;, &#39;160&#39;: &#39; &#39;,
           &#39;lt&#39;: &#39;<&#39;, &#39;60&#39;: &#39;<&#39;,
           &#39;gt&#39;: &#39;>&#39;, &#39;62&#39;: &#39;>&#39;,
           &#39;amp&#39;: &#39;&&#39;, &#39;38&#39;: &#39;&&#39;,
           &#39;quot&#39;: &#39;"&#39;&#39;"&#39;, &#39;34&#39;: &#39;"&#39;, }
  re_charEntity = re.compile(r&#39;?(?P<name>\w+);&#39;)
  sz = re_charEntity.search(htmlstr)
  while sz:
    entity = sz.group() # entity全称,如>
    key = sz.group(&#39;name&#39;) # 去除&;后entity,如>为gt
    try:
      htmlstr = re_charEntity.sub(CHAR_ENTITIES[key], htmlstr, 1)
      sz = re_charEntity.search(htmlstr)
    except KeyError:
      # 以空串代替
      htmlstr = re_charEntity.sub(&#39;&#39;, 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__ == &#39;__main__&#39;:
  s = file(&#39;test.html&#39;).read()
  news = filter_tags(s)
  print news

以上がPython が正規表現を使用して HTML タグをフィルタリングまたは置換する方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。