python 正则表达式过滤文本中的html标签 源代码解析

#py2.7
#coding:utf-8import re
import os
import chardetdef filter_tag(htmlstr):re_cdata = re.compile('<!DOCTYPE HTML PUBLIC[^>]*>', re.I)re_script = re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>', re.I) #过滤脚本re_style = re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>', re.I) #过滤stylere_br = re.compile('<br\s*?/?>')re_h = re.compile('</?\w+[^>]*>')re_comment = re.compile('<!--[\s\S]*-->')s = re_cdata.sub('', htmlstr)s = re_script.sub('', s)s=re_style.sub('',s)s=re_br.sub('\n',s)s=re_h.sub(' ',s)s=re_comment.sub('',s)blank_line=re.compile('\n+')s=blank_line.sub('\n',s)s=re.sub('\s+',' ',s)s=replaceCharEntity(s)return sdef replaceCharEntity(htmlstr):CHAR_ENTITIES={'nbsp':'','160':'','lt':'<','60':'<','gt':'>','62':'>','amp':'&','38':'&','quot':'"','34':'"'}re_charEntity=re.compile(r'&#?(?P<name>\w+);') #命名组,把 匹配字段中\w+的部分命名为name,可以用group函数获取sz=re_charEntity.search(htmlstr)while sz:#entity=sz.group()key=sz.group('name') #命名组的获取try:htmlstr=re_charEntity.sub(CHAR_ENTITIES[key],htmlstr,1) #1表示替换第一个匹配sz=re_charEntity.search(htmlstr)except KeyError:htmlstr=re_charEntity.sub('',htmlstr,1)sz=re_charEntity.search(htmlstr)return htmlstrif __name__=='__main__':cpath=os.getcwd()for root,dirs,files in os.walk(cpath):for file in files:if file.endswith('htm') or file.endswith('html'):f=open(root+os.path.sep+file)stream=f.read()htmlstr =stream.decode(chardet.detect(stream)['encoding'])rs=filter_tag(htmlstr)f.close()txtname=re.sub(r'.htm*$','.txt',file)print txtnamef=open(root+os.path.sep+txtname,'w')f.write(rs.encode('utf-8'))f.close()


总结:

转义符:

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线或汉字

\s 匹配任意的空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

\W 匹配任意不是字母,数字,下划线,汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配除了x以外的任意字符

[^aeiou] 匹配除了aeiou这几个字母以外的任意字符


常用的限定符代码/语法说明:

*重复零次或更多次

+重复一次或更多次

?重复零次或一次

{n}重复n次

{n,}重复n次或更多次

{n,m}重复n到m次


关于命名组:

命名组:(?P<name>.....),详见:http://scm002.iteye.com/blog/1491521

这篇文章里面还提到了界定( 问号开头,前向则有个'<'号,非则有个'!' 号 ):

前向界定 (?<=…)

后向界定 (?=…)  

前向非界定 (?<!....)

后向非界定 (?!.....)





转载于:https://www.cnblogs.com/rav009/p/5131106.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++--Qt使用Http协议

2019独角兽企业重金招聘Python工程师标准>>> #include <QNetworkAccessManager>//包含QNetworkAccessManager类 #include <QNetworkRequest>//包含QNetworkRequest类 #include <QNetworkReply>//包含QNetworkReply类 #include <QtCore> #in…

Oracle数据库adg数据没同步,Oracle 11g备库无法开启ADG的原因分析

今天碰到一个有些奇怪的问题&#xff0c;但是奇怪的现象背后都是有本质的因果。下午在做一个环境的检查时&#xff0c;发现备库是在mount阶段&#xff0c;这可是一个11gR2的库&#xff0c;没有ADG实在是太浪费了&#xff0c;对于这种情况感觉太不应该了。所以尝试启动至open阶段…

linux基本安全配置手册

安装注意 作为服务器&#xff0c;不安装不需要的组件&#xff0c;所以在选择组件的时候&#xff0c;不要安装服务包和桌面但需要开发工具和开发包。 以下命令等适用redhat/centos 4,5 1.删除系统特殊的的用户帐号&#xff1a; 禁止所有默认的被操作系统本身启动的且不需要的帐号…

张邱建算经 卷下

周 甄 鸾 注经   唐 李淳风 注释   刘孝孙 撰细草   今有甲乙丙丁戊五人共猎获鹿约以甲六乙五丙四丁三戊二分之今获鹿五 问各得几何   答曰   甲得一鹿四分鹿之二   乙得一鹿四分鹿之一   丙得一鹿   丁得四分鹿之三   戊得四分鹿之二   术曰列置甲…

【转】使用JDK自带jvisualvm监控tomcat

转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具、该工具是用来监控java运行程序的cpu、内存、线程等的使用情况。并且使用图表的方式监控java程序、还具有远程监控能力。不失为一个用来监控tomcat的好工具。 在jdk目录下的bin目录中可以找到jvisu…

双网卡oracle rac,Linux+Oracle 10g RAC双网卡绑定和解除绑定的实现(2)

解除双网卡绑定十一、停数据库和crs在rac1和rac2上停数据库和crs#cd /u01/app/oracle/product/10.2.0/crs_1/bin停数据库实例#./srvctl stop instance –d devdb –i ora.devdb.devd1.inst#./srvctl stop instance –d devdb –i ora.devdb.devd2.inst停数据库#./srvctl stop …

推荐十款非常优秀的 HTML5 在线设计工具

网络有很多优秀的设计和开发工具可能大家都不知道&#xff0c;因此这篇文章就向设计师推荐十款优秀 HTML5 在线工具&#xff0c;这些工具能够帮助设计师们设计出更有创意的作品。随着 HTML5 技术的不断成熟&#xff0c;网络上涌现出越来越多的优秀 HTML5 应用&#xff0c;一起看…

【转】使用Apache Kylin搭建企业级开源大数据分析平台

http://www.thebigdata.cn/JieJueFangAn/30143.html 本篇文章整理自史少锋4月23日在『1024大数据技术峰会』上的分享实录&#xff1a;使用Apache Kylin搭建企业级开源大数据分析平台。 正文如下 我先做一个简单介绍我叫史少锋&#xff0c;我曾经在IBM、eBay做过大数据、云架构的…

每日英语:Apple Unveils New iPads

Apple Inc. s answer to the increasingly cutthroat tablet-computer market: more product choices and free software. cutthroat&#xff1a;残酷的&#xff0c;剧烈的&#xff0c;凶手    At an event here Tuesday, Apple showed off a new full-size tablet--now ca…

wordpress漏洞上传php文件夹,WordPress Asset-Manager PHP文件上传漏洞

这个模块利用Metasploi脆弱漏洞库在WordPress版本Asset-Manager插件2.0以及以下版本发现的。允许上传php文件、一用户可以上传一个文件到一个临时目录没有身份验证,从而导致执行任意代码。### This file is part of the Metasploit Framework and may be subject to# redistrib…

C#基于Socket的CS模式的完整例子

基于Socket服务器端实现本例主要是建立多客户端与服务器之间的数据传输&#xff0c;首先设计服务器。打开VS2008&#xff0c;在D:\C#\ch17目录下建立名为SocketServer的Windows应用程序。打开工程&#xff0c;往当前窗体中添加控件&#xff0c;如表17-6所示。表17-6 添加控件列…

Java基础之写文件——缓冲区中的多条记录(PrimesToFile3)

控制台程序&#xff0c;上一条博文&#xff08;PrimesToFile2&#xff09;每次将一个素数写入到文件中&#xff0c;所以效率不是很高。最好是使用更大的缓冲区并加载多个素数。 本例重复使用三个不同的视图缓冲区加载字节缓冲区并尽可能加入更多的素数&#xff0c;推荐使用这种…

导出oracle sequences,利用数据泵只导出序列

Oracle的数据泵导入导出功能比原有的导入导出工具(exp/imp)功能强很多。利用数据泵我们可以只导出某一特定对象类型&#xff0c;并且可以指定过滤条件。这个功能的实现主要依靠expdp的include参数。联机文档对于参数的功能描述如下&#xff1a;INCLUDEDefault: nonePurposeEnab…

HDU2546_用01背包做

题目大意&#xff1a; 电子科大本部食堂的饭卡有一种很诡异的设计&#xff0c;即在购买之前判断余额。如果购买一个商品之前&#xff0c;卡上的剩余金额大于或等于5元&#xff0c;就一定可以购买成功&#xff08;即使购买后卡上余额为负&#xff09;&#xff0c;否则无…

俄罗斯游戏软件:C语言应用初步感受

俄罗斯游戏软件&#xff1a;C语言应用初步感受C语言课程设以一节课&#xff0c;老师提供了一个C语言的飞俄罗斯方块让我们感受&#xff0c;我们所学的C语言课程&#xff0c;主要是各种语句的练习&#xff0c;这次是用我们所学过的知识来感受一个实际的系统。首先安装c-free&…

重定向 12 21 解析

在 shell 程式中&#xff0c;最常使用的 FD (file descriptor) 大概有三个, 分别是: 0: Standard Input (STDIN) 1: Standard Output (STDOUT) 2: Standard Error Output (STDERR) 在标准情况下, 这些FD分别跟如下设备关联: stdin(0): keyboard 键盘输入,并返回在前端 stdout(…

oracle xml中cdata,XML CDATA的作用

XML CDATA的作用更新时间&#xff1a;2009年09月01日 00:52:36 作者&#xff1a;当你用FLASH和xml结合做网站应用程序时&#xff0c;例如你做在我研究游戏排行榜中&#xff0c;当让人自由输入姓名时&#xff0c;人们可以输入一些符号&#xff0c;例如∶""、"/…

SQL登录 18470 18452 错误

18452&#xff0c;是验证模式没有选择混合模式。 对应方法&#xff1a; 设置允许SQL Server身份登录(基本上这个很有用) 操作步骤&#xff1a; 1。在企业管理器中&#xff0c;展开"SQL Server组"&#xff0c;鼠标右键点击SQL Server服务器的名称 2。选择…

android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏

概述 在很app上都见过 可折叠的顶部导航栏效果。google support v7 提供了 CollapsingToolbarLayout 可以实现这个效果。效果图如下&#xff1a; 实现步骤 1. 写一个 CollapsingToolbarLayout&#xff0c;它有两个 子视图&#xff0c;一个就是上图显示的图片&#xff08;降落伞…

linux ssh服务端下载文件,Linux SSH服务端配置文件设置

一 SSH概述SSH 由 IETF 的网络小组(Network Working Group)所制定&#xff1b;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统…