python的re模块高级用法

正则表达式的使用例子——实现简单的数据清洗

1.数据来源(这是我找的,其他来源也可,可跳过):

  • 打开一个网页(b站什么的,推荐使chrome、edge浏览器,我使用的是edge):
  • 找个空白处右键点击检查元素,然后就会变成下图
  • 点击显示代码那一侧的左上角的带有箭头的东西,然后就会发现在左边点击相应内容右边就会显示相应代码(我选中的是蓝色部分)
  • 跳转到相应代码后ctrl+c复制,打开一个记事本或者sublime text等文件,粘贴

2.正文(数据清洗)

我希望把上述数据段简化成一段只有中文介绍的数据,不希望除中文外的东西出现。在介绍具体做法前,先来了解什么是正则表达式:https://blog.csdn.net/antony1776/article/details/83062899

简单来说,正则表达式就是一些用一些规则来表示字母,数字,符号。主要用来匹配类似的数据,具体来讲可分为:检查数据是否符合规范,例如注册邮箱的时候一定要多少位,账号第一位不能是什么;提取相似的大量信息,爬虫就是

我采用python来完成这件事

思路1:将中文剥离出来。那么使用re.findall(r"[\u4e00-\u9fa5]+", s)

In [1]: import re

In [2]: 
   ...: s = '''<div class="job-detail">
   ...:         <p><strong>我们需要你来:</strong></p>
   ...: <p>负责产品开发核心后台支持系统</p>
   ...: <p>负责产品架构、性能、安全、扩展等优化的设计和实现</p>
   ...: <p>&nbsp;</p>
   ...: <p><strong>我们希望你能:</strong></p>
   ...: <p>——拥有良好基础知识,熟悉常用算法和数据结构;&nbsp;</p>
   ...: <p>—— 两年以上python或Java等后端语言开发经验, 熟练掌握面向对象编程;&nbsp;</p>
   ...: <p>——具有技术钻研精神,追求完美,并具有较强自驱学习能力;&nbsp;</p>
   ...: <p>——熟练掌握MySQL数据库开发,熟悉SQL索引调优;&nbsp;</p>
   ...: <p>——熟悉tornado等框架,熟悉异步原理;&nbsp;</p>
   ...: <p>——对高负载、大访问量情况下的系统架构的搭建、调试、排错、优化、部署等方面有一定的经验;</p>
   ...: <p>——熟悉多种语言及流行技术,能够解决某种语言开发中遇到的问题优先;&nbsp;</p>
   ...: <p>——开源贡献者优先,github源码者优先,技术博客者优先。</p>
   ...: 
   ...:         </div>'''

In [3]: re.findall(r"[\u4e00-\u9fa5]+", s)
Out[3]: 
['我们需要你来',
 '负责产品开发核心后台支持系统',
 '负责产品架构',
 '性能',
 '安全',
 '扩展等优化的设计和实现',
 '我们希望你能',
 '拥有良好基础知识',
 '熟悉常用算法和数据结构',
 '两年以上',
 '或',
 '等后端语言开发经验',
 '熟练掌握面向对象编程',
 '具有技术钻研精神',
 '追求完美',
 '并具有较强自驱学习能力',
 '熟练掌握',
 '数据库开发',
 '熟悉',
 '索引调优',
 '熟悉',
 '等框架',
 '熟悉异步原理',
 '对高负载',
 '大访问量情况下的系统架构的搭建',
 '调试',
 '排错',
 '优化',
 '部署等方面有一定的经验',
 '熟悉多种语言及流行技术',
 '能够解决某种语言开发中遇到的问题优先',
 '开源贡献者优先',
 '源码者优先',
 '技术博客者优先']

这种做法虽然能够提取所有的中文,但是改变了许多语句原来的意思。

思路二:删掉所有的英文及符号

import re

s = '''<div class="job-detail">
        <p><strong>我们需要你来:</strong></p>
<p>负责产品开发核心后台支持系统</p>
<p>负责产品架构、性能、安全、扩展等优化的设计和实现</p>
<p>&nbsp;</p>
<p><strong>我们希望你能:</strong></p>
<p>——拥有良好基础知识,熟悉常用算法和数据结构;&nbsp;</p>
<p>—— 两年以上python或Java等后端语言开发经验, 熟练掌握面向对象编程;&nbsp;</p>
<p>——具有技术钻研精神,追求完美,并具有较强自驱学习能力;&nbsp;</p>
<p>——熟练掌握MySQL数据库开发,熟悉SQL索引调优;&nbsp;</p>
<p>——熟悉tornado等框架,熟悉异步原理;&nbsp;</p>
<p>——对高负载、大访问量情况下的系统架构的搭建、调试、排错、优化、部署等方面有一定的经验;</p>
<p>——熟悉多种语言及流行技术,能够解决某种语言开发中遇到的问题优先;&nbsp;</p>
<p>——开源贡献者优先,github源码者优先,技术博客者优先。</p>

        </div>'''

def main():
	ret = re.sub(r"<([a-zA-Z0-9]|\W)+>", '', s)
	print(ret)

if __name__ == '__main__':
	main()

虽然能够保证原来的意思,但是没用的内容却没有删干净,并且第一句和第二局之间少了间隔

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值