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人人网登录应用实例
Sep 26 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
Nov 14 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python中metaclass原理与用法详解
Jun 25 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
python3中布局背景颜色代码分析
Dec 01 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
Django REST framework 限流功能的使用
Jun 24 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
定义select的边框颜色
2008/04/28 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
JSONP跨域请求
2017/03/02 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python 的 with 语句详解
2014/06/13 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Python 中如何写注释
2020/08/28 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
python中_del_还原数据的方法
2020/12/09 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
网络教育自我鉴定
2013/11/01 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
运动会稿件100字
2014/02/21 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
保安公司服务承诺书
2014/05/28 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
搞笑老公保证书
2015/02/26 职场文书
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技