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标准库os.path包、glob包使用实例
Nov 25 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
ipython和python区别详解
Jun 26 Python
python plotly画柱状图代码实例
Dec 13 Python
Python3 元组tuple入门基础
Feb 09 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
Python列表倒序输出及其效率详解
Mar 04 Python
Python参数传递实现过程及原理详解
May 14 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
python字符串常规操作大全
May 02 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 $_SERVER详解
2009/01/16 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
JavaScript关于select的相关操作说明
2010/01/13 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JS打印组合功能
2016/08/04 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
越南综合购物网站:Lazada越南
2019/06/10 全球购物
给同学的道歉信
2014/01/16 职场文书
中班开学寄语
2014/04/04 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
2014年团队工作总结
2014/11/24 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
升职自荐书
2019/05/09 职场文书