Python使用正则表达式过滤或替换HTML标签的方法详解


Posted in Python onSeptember 25, 2017

本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法。分享给大家供大家参考,具体如下:

python正则表达式关键内容:

python正则表达式转义符:

. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

常用的python正则表达式限定符代码/语法说明:

*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
关于python正则表达式命名组:
命名组:(?P<name>.....)
这篇文章里面还提到了界定( 问号开头,前向则有个'<'号,非则有个'!' 号 ):
前向界定 (?<=…)
后向界定 (?=…)
前向非界定 (?<!....)
后向非界定 (?!.....)

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('test.html').read()
  news = filter_tags(s)
  print news
Python 相关文章推荐
python中使用smtplib和email模块发送邮件实例
Apr 22 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Python构建图像分类识别器的方法
Jan 12 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
Pytorch之保存读取模型实例
Dec 30 Python
python判断正负数方式
Jun 03 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
教你怎么用python selenium实现自动化测试
May 27 Python
python实现简单聊天功能
Jul 07 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 #Python
Python实现破解猜数游戏算法示例
Sep 25 #Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 #Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 #Python
python中通过预先编译正则表达式提高效率
Sep 25 #Python
python之Character string(实例讲解)
Sep 25 #Python
python利用正则表达式搜索单词示例代码
Sep 24 #Python
You might like
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Django中url的反向查询的方法
2018/03/14 Python
浅谈python锁与死锁问题
2020/08/14 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
德国网上宠物店:Zoobio
2018/05/23 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
上班打牌检讨书
2014/02/07 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
保护环境倡议书500字
2014/05/19 职场文书
小学班主任培训方案
2014/06/04 职场文书
关于美容院的活动方案
2014/08/14 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
2015年考研复习计划
2015/01/19 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
导游词之张家界
2019/10/31 职场文书
vue中div禁止点击事件的实现
2022/04/02 Vue.js
Golang流模式之grpc的四种数据流
2022/04/13 Golang