「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数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...
随机推荐
- 【EBook】-NO.161.微服务.1 -【微服务架构与实践】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- gdb调试android
手机端 adb shell gdbserver --mulit *:23333 /data/local/tmp/test 电脑 target remote 192.168.1.170:23333
- U盘制作系统盘的方法:
1, 使用 u 盘制作 ubuntu16.04 的方法, 安装软件后,直接使用软件将 U盘制作成系统盘就好了 [1] 下载安装工具: UltraISO 官网: http://www.ezbsyst ...
- arcgis for JavaScript API 4.5与4.3的区别
arcgis 4.5与4.3区别: 鉴于本人使用4.3时间比较久,而arcgis for JavaScript API于9月28日推出了4.5版本,但是直接更换4.5的init.js会出现意想不到的错 ...
- 大部分教程不会告诉你的 12 个 JS 技巧
from:https://www.infoq.cn/article/eSYzcMZK4PkOzZC_68fv 在这篇文章中,作者将分享 12 个非常有用的 JavaScript 技巧,可以帮助你写出简 ...
- [ISSUE] [Centos] Centos Start Nginx Show: Failed to start nginx.service:unit not found
CMD Line:systemctl start nginx.serviceFailed to start nginx.service: Unit not found. Solution: 1.vim ...
- Git 教程(一):简介和安装
为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指,就是简单得一笔带过,或者,只支离破碎地介绍Git的 ...
- Jupyter Notebooks 是数据科学/机器学习社区内一款非常流行的工具
Jupyter Notebooks 是数据科学/机器学习社区内一款非常流行的工具.Jupyter Notebooks 允许数据科学家创建和共享他们的文档,从代码到全面的报告都可以.李笑来 相当于拿他来 ...
- Qt框架及模块认识
小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...
- go语言入门教程:基本语法之变量声明及注意事项
一.变量的使用 1.1 什么是变量 变量是为存储特定类型的值而提供给内存位置的名称.在go中声明变量有多种语法. 所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变 1.2 声明 ...