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文件和目录操作详解
Feb 08 Python
python实现将文本转换成语音的方法
May 28 Python
Python读取网页内容的方法
Jul 30 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
Python开发网站目录扫描器的实现
Feb 21 Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
详解Python绘图Turtle库
Oct 12 Python
详解使用Python下载文件的几种方法
Oct 13 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
Python中zip函数如何使用
Jun 04 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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学习笔记之一
2011/01/17 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
为python设置socket代理的方法
2015/01/14 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
linux环境下Django的安装配置详解
2019/07/22 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python实现的config文件读写功能示例
2019/09/24 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
学生自我鉴定范文
2013/10/04 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
优秀广告词大全
2014/03/19 职场文书
副处级干部考察材料
2014/05/17 职场文书
辩护词格式
2015/05/22 职场文书