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 02 Python
PyQt5每天必学之布局管理
Apr 19 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
Python常用类型转换实现代码实例
Jul 28 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
python中K-means算法基础知识点
Jan 25 Python
python 模拟在天空中放风筝的示例代码
Apr 21 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程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php之XML转数组函数的详解
2013/06/07 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
js验证上传图片的方法
2015/05/12 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
python爬虫获取多页天涯帖子
2018/02/23 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
python采集微信公众号文章
2018/12/20 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
Julep官网:美容产品和指甲油
2017/02/25 全球购物
电焊工工作岗位职责
2014/02/06 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
经济贸易系求职信
2014/08/04 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
Python之matplotlib绘制折线图
2022/04/13 Python