Python이 정규식을 사용하여 HTML 태그를 필터링하거나 바꾸는 방법 소개

巴扎黑
풀어 주다: 2017-09-26 10:36:02
원래의
2674명이 탐색했습니다.

이 글에서는 정규식을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿