补充re模块
Re模块
Re.findall(‘正则表达式’,’要操作的字符串’)
显示所有的结果
Re.search(‘正则表达式’,’要操作的字符串’)
显示只查到的第一个结果的索引值,并且通过ret.group取得值
Ret = re.search(‘\d+’,’dsafjhafj34345sdfadfa)
If ret:
Print(ret.group)
Re.match(‘正则表达式’,’要操作的字符串’)
显示默认给正则表达式加一个^,相当于从头开始找第一个,
Findall 找所有 返回列表
Search 找第一个 返回一个结果集,通过.group取值,如果没有匹配到,返回None, .group报错
Match 从头开始找第一个,返回一个结果集,通过.group取值,如果没有匹配到,返回None, .group报错
Match可以被search替代
re.search(‘^\d+’,’dsafjhafj34345sdfadfa) == re.match(‘\d+’,’dsafjhafj34345sdfadfa)
补充:
替换:
re.sub(‘正则表达式’,’要替换的内容’,’要操作的字符串’) 默认替换所有,可以写替换几个
Ret = Re.sub(‘^\d+’,’SB’,’dsafjhafj34345sdfadfa)
Print(ret)
re.subn(‘正则表达式’,’要替换的内容’,’要操作的字符串’) 默认替换所有,可以写替换几个
Ret = Re.subn(‘^\d+’,’SB’,’dsafjhafj34345sdfadfa’)
Print(ret) #(’dsafjhafj34345sdfadfa’,1) 替换后的结果和替换了几次
切割:
Re.split(‘\d+’,’jafa 3434fjflasjflja 3434jkjj4l3jk34j’)
Print(ret) #按照正则表达式来切分字符串
参数说明:
参数 正则表达式 待匹配的字符串
替换 正则 要替换的结果 待匹配的字符串
Re.compile()
对于一个经常被重用的正则表达式 我们可以先进行一次编译
之后只要用到这个表达式直接拿出来用就行了
这样做就节省了代码的执行 时间
Par = re.compile(‘\d+’)
Print(par)
Ret = par.findall(‘asdfaf33434afsadf’)
Print(ret)
Re.finditer()
三个目标:
- 时间
- 空间
- 用户体验
Ret = re.findall(‘\d+’,’fd2324ff343adf45454’)
Print(ret)
Ret = re.finditer(‘\d+’,’fd2324ff343adf45454’)
For i in ret: #得到结果集 ,用的时候才用.group取值
Print(i.group())
Par = re.compile(\d+) #节省了时间
Ret =par.finditer(‘erre34343ffdfd454546v4n5nn4n3n4n5n43’) #节省了空间
总结:
匹配:
Findall
Search match 返回结果集 用.group取值
字符串其他处理:
替换 sub subn
切割 spilt
进阶:
节省空间 finditer 返回一个迭代器,迭代器里装的都是结果集,需要通过group取值
Findall 配合分组使用 ---> findall 永远优先显示分组中的内容!!
在分组里加入 ?: 就等于取消这个分组的优先级别
节省时间 compile 能够提前编译一个正则表达式,当同一个正则需要多次被使用的时候,可以节省时间
分组在正则表达式中发挥的作用
分组在findall 当中默认会优先被显示出来
如果不想有限,name在分组中添加(?:正则规则)表示取消这个规则的优先显示
Import re
Ret = re.findall(‘>(\w+)<’,r’<title>qqixng<\title>’)
Print(ret) # findall 永远优先显示分组中的内容!!
在分组里加入 ?: 就等于取消这个分组的优先级别
Split和分组,会保留被切掉的再分组中的内容
Search 和分组
在爬虫/数据清洗的过程中最常用的正则表达式的操作
并不是把我要的内容正则写出来
而是把整个页面都用正则描述下来,然后把我需要的内容放在分组里
这样就能够取到我想要的内容了
遇见分组:
Findall 优先显示分组中的内容
Spilt 保留被切掉的分组内的内容
Search 可以通过组的索引取值
取消分组的特殊行为 (?: 正则)
分组命名:
分组里添加 ?P<起的名字>就可以在 .group(‘起的名字’) 直接获取分组名字对应的内容
特殊的需求
HTML
<h2>hello</h2> 前后都是标签 直接显示中间的内容