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次
关于命名组:
这篇文章里面还提到了界定( 问号开头,前向则有个'<'号,非则有个'!' 号 ):
前向界定 (?<=…)
后向界定 (?=…)
前向非界定 (?<!....)
后向非界定 (?!.....)
转载于:https://www.cnblogs.com/rav009/p/5131106.html
python 正则表达式过滤文本中的html标签 源代码解析相关推荐
- python文本筛选html_python 正则表达式过滤文本中的html标签 源代码解析
#py2.7 #coding:utf-8 import re import os import chardet def filter_tag(htmlstr): re_cdata = re.compi ...
- python正则表达式提取文本中的电话号码和邮箱
代码: #! python3 import pyperclip,rephoneregex = re.compile(r''' (\d{3}|\(\d{3}\))? # area code (\s|-| ...
- java 使用正则表达式过滤HTML中标签
/*** 去掉文本中的html标签** @param inputString* @return*/public static String html2Text(String inputString) ...
- python过滤文本中的emoji表情
python过滤文本中的emoji表情 最近在处理文本内容的时候发现很多文本会有特色表情,由于占位较多,想着能过滤掉就好,也不影响文本内容含义,并且对后续做语义分析也有帮助. 网上搜了下,总体还是通过 ...
- vue如何过滤html标签,去除富文本中的html标签及vue、react、微信小顺序中的过滤器...
在猎取富文本后,又只需显现部分内容,须要去除富文本标签,然后再截取个中一部分内容:然后就是过滤器,在微信小顺序中运用照样挺屡次的,在vue及react中也遇到过 1.富文本去除html标签去除html ...
- python过滤敏感词汇_利用Python正则表达式过滤敏感词的方法
利用Python正则表达式过滤敏感词的方法 问题描述:很多网站会对用户发帖内容进行一定的检查,并自动把敏感词修改为特定的字符. 技术要点: 1)Python正则表达式模块re的sub()函数: 2)在 ...
- IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题) 参考文章: (1)IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题) (2)https:// ...
- python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...
这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...
- Python正则表达式匹配字符串中的数字
导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...
最新文章
- 移位寄存器专题(verilog HDL设计)
- 查看IIS上面的每个网站分别用了多少内存
- java和python工资-python为什么叫爬虫 python工资高还是java的高
- 不是同一个工程的exe与dll,如何调试dll
- 通过自定义资源扩展Kubernetes
- css div里引用em字体会变斜体_前端开发中7种必要了解的CSS长度单位
- C#之app.config、exe.config和vshost.exe.config作用区别
- 端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)
- 软件工程---18.面向服务的软件工程
- SQL执行效率提升几万倍的操作详解!
- 【认证课程】NP理论复习之IS-IS
- CitrixVDI新版动手实验手册
- java8官网下载地址
- Python-Cartopy制图学习02-中国2010年5月干旱情况空间制图
- excel两列数据对比找不同_快速找出表格中两列的不同项,事半功倍的方法记得收藏...
- html日期函数,YEAR 函数 (时间日期函数)
- StringBuilder
- BERT模型--transflow转为pytorch
- python3编程小车_控制小车
- switch调试软件+金手指
热门文章
- 贷款100万到手97万,这样合理吗?
- C 怎么处理windows路径_python学习笔记-7:文件读写之文件与文件路径
- android 如何修改百度导航诱导界面,Android 百度导航SDK
- android确认密码代码,Android自定义View实现验证码or密码输入框
- c语言计算a+aa+aaa_物业服务企业信用等级公布,42家获AAA级!你家小区物业怎么样?...
- c语言程序后退_c语言中向后退一格是啥符号?
- 【TensorFlow-serving】初步学习模型部署
- SQL on and 和 on where 的区别
- 如何正确地使用Java的@deprecated标注
- JAVA 框架-Spring-AOP面向切面