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发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
Python类的继承和多态代码详解
Dec 27 Python
Python给图像添加噪声具体操作
Mar 03 Python
Python的log日志功能及设置方法
Jul 11 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
Pandas数据类型之category的用法
Jun 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.ini 中文版
2006/10/28 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
Python反射用法实例简析
2017/12/22 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
经典大学生求职信范文
2014/01/06 职场文书
公司开业庆典主持词
2014/03/21 职场文书
公司募捐倡议书
2014/05/14 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
事业单位年度考核评语
2014/12/31 职场文书
销售开票员岗位职责
2015/04/15 职场文书
消费者理赔投诉书
2015/07/02 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android