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的Django框架测试驱动开发的教程
Apr 22 Python
Python实现将xml导入至excel
Nov 20 Python
Python网站验证码识别
Jan 25 Python
图解Python变量与赋值
Apr 03 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Python实现异步IO的示例
Nov 05 Python
Python Selenium库的基本使用教程
Jan 04 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
Python list列表删除元素的4种方法
Nov 01 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动态变静态原理
2006/11/25 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php跨服务器访问方法小结
2015/05/12 PHP
JS获取父节点方法
2009/08/20 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
解决python运行效率不高的问题
2020/07/20 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
销售经理工作职责范文
2013/12/03 职场文书
给客户的道歉信
2014/01/13 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
邮政员工辞职信
2014/01/16 职场文书
优良学风班申请材料
2014/02/13 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
保密工作整改报告
2014/11/06 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
解析Redis Cluster原理
2021/06/21 Redis
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技