「Python」数据清洗常用正则
对爬虫数据进行自然语言清洗时用到的一些正则表达式
标签中的所有属性匹配(排除src,href等指定参数)
# \b(?!src|href)\w+=[\'\"].*?[\'\"](?=[\s\>])
# 匹配特征 id="..."
# \b(?!...)排除属性名中的指定参数,零宽断言前向界定判断属性结束
# tips: 带\b的python正则匹配一定要加r转义
str1 = '''
<div class="concent" id="zoomcon" style="padding:15px;">
<img border="0" src="/xcsglj/zyhd/201802/f5492c1752094f44bcebae4a68480c64/images/9a900610afc54ee3b468780785a2ecec.gif">
<img border="0" src="/xcsglj/zyhd/201802/f5492c1752094f44bcebae4a68480c64/images/4b802f5d2d8c4ecd9a0525e0da7d886e.gif">
<img href="0" src="/xcsglj/zyhd/201802/f5492c1752094f44bcebae4a68480c64/images/4b802f5d2d8c4ecd9a0525e0da7d886e.gif">
'''
print(re.findall(r'\b(?!src)\w+=[\'\"].*?[\'\"](?=[\s\>])', string=str1))
# result: ['class="concent"', 'id="zoomcon"', 'style="padding:15px;"', 'border="0"', 'border="0"', 'href="0"']
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
html标签的所有参数
# (?<=\<\w{1}\s).*?(?=\>)
# (?<=\<\w{2}\s).*?(?=\>)
# ...
# 清除n个字母的标签的所有参数
# tips: 零宽断言不支持不定长度的匹配
str1 = '''
<a class="1" id="1" style="padding:1;">
<td class="2" id="2" style="padding:2;">
<div class="3" id="3" style="padding:3;">
<span class="4" id="4" style="padding:4;">
<table class="5" id="5" style="padding:5;">
'''
print(re.findall('(?<=\<\w{1}\s).*?(?=\>)', string=str1))
# result: ['class="1" id="1" style="padding:1;"']
print(re.findall('(?<=\<\w{2}\s).*?(?=\>)', string=str1))
# result: ['class="2" id="2" style="padding:2;"']
print(re.findall('(?<=\<\w{3}\s).*?(?=\>)', string=str1))
# result: ['class="3" id="3" style="padding:3;"']
print(re.findall('(?<=\<\w{4}\s).*?(?=\>)', string=str1))
# result: ['class="4" id="4" style="padding:4;"']
print(re.findall('(?<=\<\w{5}\s).*?(?=\>)', string=str1))
# result: ['class="5" id="5" style="padding:5;"']
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
非中文字符
# u'[^\u4e00-\u9fa5]+'
# 清除非中文字符
str1 = 'aa.,a中文,aa。a'
print(re.compile(u"[^\u4e00-\u9fa5]+").sub('', str1))
# result: 中文
- 1
- 2
- 3
- 4
- 5
- 6
- 7
指定通配符中的内容
# \{.*?\} // 匹配{}中的内容
# \<.*?\> // 匹配<>中的内容
str1 = '{通配符}你好,今天开学了{通配符},你好'
print(re.compile(r'\{.*?\}').sub('', str1))
# result: 你好,今天开学了,你好
- 1
- 2
- 3
- 4
- 5
- 6
html标签尾部的空格
# \s*(?=\>)
- 1
指定标签(包括中间的内容)
# \<style.*?/style\>
- 1
清除常用中英文字符/标点/数字外的特殊符号
# u'[^\u4e00-\u9fa5\u0041-\u005A\u0061-\u007A\u0030-\u0039\u3002\uFF1F\uFF01\uFF0C\u3001\uFF1B\uFF1A\u300C\u300D\u300E\u300F\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\u3010\u3011\u2014\u2026\u2013\uFF0E\u300A\u300B\u3008\u3009\!\@\#\$\%\^\&\*\(\)\-\=\[\]\{\}\\\|\;\'\:\"\,\.\/\<\>\?\/\*\+\_"\u0020]+'
str1 = re\
.compile(\
u "[^"
u "\u4e00-\u9fa5"
u "\u0041-\u005A"
u "\u0061-\u007A"
u "\u0030-\u0039"
u "\u3002\uFF1F\uFF01\uFF0C\u3001\uFF1B\uFF1A\u300C\u300D\u300E\u300F\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\u3010\u3011\u2014\u2026\u2013\uFF0E\u300A\u300B\u3008\u3009"
u "\!\@\#\$\%\^\&\*\(\)\-\=\[\]\{\}\\\|\;\'\:\"\,\.\/\<\>\?\/\*\+\_"
u "\u0020"
u "]+")\
.sub('', str1)
--------------------- 作者:Hugh_Dong 来源:CSDN 原文:https://blog.csdn.net/qq_33282586/article/details/80643817?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!
「Python」数据清洗常用正则的更多相关文章
- 「python」: arp脚本的两种方法
「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...
- 「Python」socket指南
开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...
- 「Python」字符串操作内置函数
目录: capitalize casefold center count encode decode endswith expandtabs find format format_map index ...
- 「Python」5个开源项目
1-OpenAI universe Universe是一个能在世界上所有的游戏.网站和其他应用中,衡量和训练AI通用智能的软件平台. Universe,AI代理通过称为虚拟网络计算或VNC发送模拟的鼠 ...
- test「Python」流程&中文
#例1 text='dShArpen骑草泥马在马勒隔壁玩Python时看到一群SB绿茶婊在逗逼,马上的他马上吓尿了' iftext = '马' for letter in text.decode('u ...
- 「Python」为什么Python里面,整除的结果会是小数?
2018-06-08 参考资料:Python学习笔记(4)负数除法和取模运算 先来看三个式子(!这是在Python3.0下的运算结果): 输出结果: ‘//’明明是整除,为什么结果不是整数,而会出现小 ...
- 「Python」6种python中执行shell命令方法
用Python调用Shell命令有如下几种方式: 第一种: os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等 ...
- 「Python」35个知识点
No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function)也是对象,而且Pyt ...
- 「Python」pandas入门教程
pandas适合于许多不同类型的数据,包括: 具有异构类型列的表格数据,例如SQL表格或Excel数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...
随机推荐
- vue中 this.$set的用法
当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. <template> <div id=& ...
- Mysql+keepalived双主
搭建环境说明: master1:192.168.175.210 主 master2:192.168.175.211 备 keepalived的vip: 192.168.175.11(注意这是虚拟IP, ...
- 【Mac】-NO.161.Mac.1 -【MacOS Error running 'Tomcat 8.5.371': Cannot run program Permission denied】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- 增长中的时间序列存储(Scaling Time Series Data Storage) - Part I
本文摘译自 Netflix TechBlog : Scaling Time Series Data Storage - Part I 重点:扩容.缓存.冷热分区.分块. 时序数据 - 会员观看历史 N ...
- 6#day2总结
一次小小的总结https://github.com/DuGuQiuBai/Java/blob/master/day02/day02%E6%80%BB%E7%BB%93.txt 1:常量(掌握) (1) ...
- Java中的过滤器,拦截器,监听器---------简单易懂的介绍
过滤器: 过滤器其主要特点在于:取你需要的东西,忽视那些不需要的东西!在程序中,你希望选择中篇文章中的所有数字,你就可以针对性的挑选数字! 拦截器: 拦截器其主要特点在于:针对你不要的东西进行拦截,比 ...
- vuepress 学习心得
vuepress是一个静态网站生成器,在我看来就是写博客和教程的好工具.教程请见官网:https://www.vuepress.cn 安装方法建议局部安装:node8.0以上,新建vue项目,可能会出 ...
- LR参数化取值规则总结
我想使用参数化输入设置10个并发用户循环1000次,第一个用户使用参数列表中的前1000个参数(第依次循环使用第一个参数.第二次循环使用第二个参数,依次类推).第二个用户使用参数列表中的2001-30 ...
- Android-Gradle(三)
依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的jar包,并且保证你能够正确使用它们.Gradle甚至可以为你做 ...
- Log4j 2使用教程一【入门】
环境 操作系统:win10log4j2版本: 2.11.0 准备 下载jar包 官网:https://logging.apache.org/log4j/2.x/download.html 把jar包放 ...