Re正则表达式

一、介绍

在爬虫数据解析中有三种解析方式

  1、re解析 #运行速度最快、效率高、准确性搞。 但是上手难度高

  2、bs4解析 #代码简单、但执行效率不高

  3、xpath解析 #语法简单,容易上手

注:在线正则表达式:https://tool.oschina.net/regex

 

二、符号表达式

1 . 匹配除换行符以外的所有字符 2 \w 匹配字符或数字或下划线 3 \s 匹配任意的空白字符 4 \d 匹配数字 5 \n 匹配一个换行符 6 \t 匹配一个制表符 7 8 ^ 匹配字符串的开始 9 $ 匹配字符串的结尾 10 11 \W 匹配非字符或数字或下划线 12 \D 匹配非数字 13 \S 匹配非空白字符 14 a|b 匹配字符a或者字符b 15 () 匹配括号内的表达式,也表示一个组 16 [...] 匹配字符组中的字符 17 [^...] 匹配除了字符组中字符的所有字符

 

三、量词:控制前面的元字符出现的次数

1 * 重复零次或更多次 2 + 重复一次或更多次 3 ? 重复零次或者1次 4 {n} 重复n次 5 {n,} 重复n次或更多次 6 {m,n} 重复md到n次

 

四、贪狼匹配和惰性匹配

1 .* 贪狼匹配 2 .*? 惰性匹配,# 在爬虫中使用较多

#实例:
s1 = '玩儿吃鸡游戏,晚上一起上游戏,干嘛呢?打游戏啊'

print('贪狼模式:',re.findall(r'玩儿.*游戏',s1))
print('惰性模式:',re.findall(r'玩儿.*?游戏',s1))

结果:

  

 

五、常规使用

 1、findall:匹配字符串中所有的符合正则的内容,返回list

li = re.findall(r"\d+","我的电话是10086,我女朋友的电话是10010") print(li)

结果:  

  

 

2、finditer:匹配字符串中所有的内容,返回迭代器,从迭代器中拿到内容需要 .group()

rest = re.finditer(r"\d+","我的电话是10086,我女朋友的电话是10010") for it in rest: print("电话:",it.group())

结果:

  

3、search:全文检索,找到一个结果就返回。返回Match对象,拿数据需要 .gruop()

rest = re.search(r"\d+","我的电话是10086,我女朋友的电话是10010") print(rest.group())

结果:

  

 

4、match:从头开始匹配,返回Match对象。拿数据需要 .gruop()

rest = re.match(r"\d+","10086我的电话是10086,我女朋友的电话是10010") print(rest.group())

结果:

  

 

5、预加载正则表达式, re.S:让 . 能匹配换行符

  obj = re.compile(r"<div class = '.*?'><span id = '\d+'>.*?</span></div>",re.S)

 

6、通过(?P<name>正则表达式),提取想要的内容到name中

s = ''' <div class = 'jay'><span id = '1'>土豆</span></div> <div class = 'jj'><span id = '2'>地瓜</span></div> <div class = 'sda'><span id = '3'>红薯</span></div> <div class = 'fbd'><span id = '4'>山药</span></div> <div class = 'sde'><span id = '5'>白菜</span></div> ''' re_obj1 = re.compile(r"<div class = '(?P<name>.*?')><span id = '(?P<id>\d+)'>(?P<nr>.*?)</span></div>",re.S) res1 = re_obj1.finditer(s) for it in res1: print(it.group("name"),'---',it.group("id"),'---',it.group("nr"))

结果:

  

 


__EOF__

本文作者语 默
本文链接https://www.cnblogs.com/weijie0717/p/15763651.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   语~默  阅读(431)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2019-01-04 Centos 7 Ntop 流量分析 安装
2015-01-04 linux、centos下查看系统版本、bios版本,内存信息等
点击右上角即可分享
微信分享提示