#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

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

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

    #py2.7 #coding:utf-8 import re import os import chardet def filter_tag(htmlstr): re_cdata = re.compi ...

  2. python正则表达式提取文本中的电话号码和邮箱

    代码: #! python3 import pyperclip,rephoneregex = re.compile(r''' (\d{3}|\(\d{3}\))? # area code (\s|-| ...

  3. java 使用正则表达式过滤HTML中标签

    /*** 去掉文本中的html标签** @param inputString* @return*/public static String html2Text(String inputString) ...

  4. python过滤文本中的emoji表情

    python过滤文本中的emoji表情 最近在处理文本内容的时候发现很多文本会有特色表情,由于占位较多,想着能过滤掉就好,也不影响文本内容含义,并且对后续做语义分析也有帮助. 网上搜了下,总体还是通过 ...

  5. vue如何过滤html标签,去除富文本中的html标签及vue、react、微信小顺序中的过滤器...

    在猎取富文本后,又只需显现部分内容,须要去除富文本标签,然后再截取个中一部分内容:然后就是过滤器,在微信小顺序中运用照样挺屡次的,在vue及react中也遇到过 1.富文本去除html标签去除html ...

  6. python过滤敏感词汇_利用Python正则表达式过滤敏感词的方法

    利用Python正则表达式过滤敏感词的方法 问题描述:很多网站会对用户发帖内容进行一定的检查,并自动把敏感词修改为特定的字符. 技术要点: 1)Python正则表达式模块re的sub()函数: 2)在 ...

  7. IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)

    IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题) 参考文章: (1)IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题) (2)https:// ...

  8. python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...

    这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...

  9. Python正则表达式匹配字符串中的数字

    导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...

最新文章

  1. 移位寄存器专题(verilog HDL设计)
  2. 查看IIS上面的每个网站分别用了多少内存
  3. java和python工资-python为什么叫爬虫 python工资高还是java的高
  4. 不是同一个工程的exe与dll,如何调试dll
  5. 通过自定义资源扩展Kubernetes
  6. css div里引用em字体会变斜体_前端开发中7种必要了解的CSS长度单位
  7. C#之app.config、exe.config和vshost.exe.config作用区别
  8. 端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)
  9. 软件工程---18.面向服务的软件工程
  10. SQL执行效率提升几万倍的操作详解!
  11. 【认证课程】NP理论复习之IS-IS
  12. CitrixVDI新版动手实验手册
  13. java8官网下载地址
  14. Python-Cartopy制图学习02-中国2010年5月干旱情况空间制图
  15. excel两列数据对比找不同_快速找出表格中两列的不同项,事半功倍的方法记得收藏...
  16. html日期函数,YEAR 函数 (时间日期函数)
  17. StringBuilder
  18. BERT模型--transflow转为pytorch
  19. python3编程小车_控制小车
  20. switch调试软件+金手指

热门文章

  1. 贷款100万到手97万,这样合理吗?
  2. C 怎么处理windows路径_python学习笔记-7:文件读写之文件与文件路径
  3. android 如何修改百度导航诱导界面,Android 百度导航SDK
  4. android确认密码代码,Android自定义View实现验证码or密码输入框
  5. c语言计算a+aa+aaa_物业服务企业信用等级公布,42家获AAA级!你家小区物业怎么样?...
  6. c语言程序后退_c语言中向后退一格是啥符号?
  7. 【TensorFlow-serving】初步学习模型部署
  8. SQL on and 和 on where 的区别
  9. 如何正确地使用Java的@deprecated标注
  10. JAVA 框架-Spring-AOP面向切面