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服务器拒绝服务攻击代码
Jan 16 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Sanic框架应用部署方法详解
Jul 18 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
Python字符串中删除特定字符的方法
Jan 15 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
python如何建立全零数组
Jul 19 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
python实现三阶魔方还原的示例代码
Apr 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 随机生成10位字符代码
2009/03/26 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
执行Python程序时模块报错问题
2020/03/26 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
施工班组长岗位职责
2014/01/05 职场文书
企业读书活动总结
2014/06/30 职场文书
个人总结与自我评价
2014/09/18 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
python基础入门之字典和集合
2021/06/13 Python
MySql数据库触发器使用教程
2022/06/01 MySQL