一.re模块
1.根据正则表达式查找内容
1.findall search match
import re ret=re.findall('d+','dakljwdi1564ssdnsh13') print(ret) #返回列表 检索出的内容是字符串格式 ret=re.search('d+','iuehfkajn1643s5ad435d14534s') print(ret) print(ret.group()) #返回显示结果集<_sre.SRE_Match object; span=(9, 13), match='1643'> #span(9,13)是索引值,match=‘1643’只能取到第一值 print(ret.group(0)) # print(ret.group(1)) #只取第一个值 所以会报错 #IndexError: no such group ret=re.search('d+','iuehfkajns') #这里检索内容无匹配项。返回时none,那么.group()就是报错 print(ret) # print(ret.group()) #AttributeError: 'NoneType' object has no attribute 'group' ret=re.match('d+','djsk123da') ret1=re.match('d+','123dasdsqdq123') #检索是是否已数字开头 print(ret) print(ret1) print(ret1.group(0)) #若有返回值,显示一个结果集,也要通过.group 取值
结果: ['1564', '13'] <_sre.SRE_Match object; span=(9, 13), match='1643'> 1643 1643 None None <_sre.SRE_Match object; span=(0, 3), match='123'> 123
match等价于search
import re
ret = re.match('^d+', '12454sdd')#默认是以数字开头,^d+==d+
#ret = re.match('d+', '12454sdd') 等价于上面等式
ret1 = re.search('^d+', '12454sdd') #等价于上面等式
print(ret)
print(ret1)
#有返回值也是一个结果集,通过.group取值
#无返回值显示none
2.替换内容:
sub 与 subn
import re
ret=re.sub('d+','男神','meets12wusir56')
#替换数字为男神
ret1=re.sub('d+','男神','meets12wusir56',1)
#后面跟着1 是count 计数替换位置
print(ret)
print(ret1)
结果:
meets男神wusir男神 <class 'str'>
meets男神wusir56
subn用法与sub一样 只是返回值是元组形式。
ret=re.subn('d+','男神','meets12wusir56')
ret1=re.subn('d+','男神','meets12wusir56',1)
print(ret,type(ret))
print(ret1)
结果:
('meets男神wusir男神', 2) <class 'tuple'>
('meets男神wusir56', 1)
3.切割:
import re
ret=re.split('d+','meet23wusir23')
print(ret)
#返回列表形式,切割按照数字
结果:
['meet', 'wusir', '']
4.对于重复使用的过程 我们为了节约时间,可以使用compile()
注意:1,时间 2,空间 3,用户体验
import re
par=re.compile('d+') #先统一编译
ret=par.split('djsa554ds45ds')
print(ret)
ret1=par.search('dhjjsakh165ds4s5')
print(ret1)
print(ret1.group(0))
ret2=par.findall('jdklsajd544dsa5')
print(ret2)
结果:
['djsa', 'ds', 'ds']
<_sre.SRE_Match object; span=(8, 11), match='165'>
165
['544', '5']
5.为了空间,我们引入finditer
ret=re.finditer('d+','dksjak1234sda5'*200)
for i in ret:
print(i)
print(i.group())
结果:
<_sre.SRE_Match object; span=(2792, 2796), match='1234'>
1234
<_sre.SRE_Match object; span=(2799, 2800), match='5'>
5
。
。
。
6.findall 永远优先显示分组内容。findall+()
import re
ret=re.findall('>(w+)<',r'<title>15a4d3a45e< itle>')#优先显示分组内容
print(ret)
#如何取消分组?
ret=re.findall('>(?:w+)<',r'<title>15a4d3a45e< itle>')
print(ret)
结果:
['15a4d3a45e']
['>15a4d3a45e<']
优先分组需要注意:
import re
ret = re.findall('www.(?:baidu|oldboy).com',r'www.baidu.com')#取消分组优先
ret1 = re.findall('www.(baidu|oldboy).com',r'www.baidu.com')#分组优先
print(ret)
print(ret1)
结果:
['www.baidu.com']
['baidu']
import re
ret = re.findall('d+(?:.d+)?',r'1.23+2.34')
ret1 = re.findall('d+(.d+)?',r'1.23+2.34')
print(ret)
print(ret1)
结果:
['1.23', '2.34']
['.23', '.34']
7.spilt+()保留切割在分组的内容:
import re
ret=re.split('(d+)','hjdsakd2564asd5sa4d5s4a6das')
print(ret)
结果:
#显示了切割的内容 数字也返回去了
['hjdsakd', '2564', 'asd', '5', 'sa', '4', 'd', '5', 's', '4', 'a', '6', 'das']
ret = re.split('d(d)','alex84wusir73')
#优先显示第二个数字
print(ret)
结果:
['alex', '4', 'wusir', '3', '']
8.search+()
import re ret = re.search(r'<(w+)>(w+)<\(w+)>',r'<title>qqxing< itle>') print(ret.group()) # 不受到分组的影响 print(ret) # 不受到分组的影响,结果集 print(ret.group(1)) #对于括号的分组1 print(ret.group(2)) #对于括号的分组2 print(ret.group(3)) #对于括号的分组3 结果: <title>qqxing< itle> <_sre.SRE_Match object; span=(0, 21), match='<title>qqxing<\title>'> title qqxing title
再看看不加分组的区别:
import re
ret = re.search(r'<w+>w+<\w+>',r'<title>qqxing< itle>')
print(ret.group()) # 不受到分组的影响
print(ret) # 不受到分组的影响
print(ret.group(1)) #对于括号的分组1
print(ret.group(2)) #对于括号的分组2
print(ret.group(3)) #对于括号的分组3
#这里search只取第一个值 所以就没有分组
结果:
<title>qqxing< itle>
File "F:/pycharmproject/新建文件夹/day0322/demo.py", line 90, in <module>
<_sre.SRE_Match object; span=(0, 21), match='<title>qqxing<\title>'>
print(ret.group(1)) #对于括号的分组1
IndexError: no such group
这样就报错了!
9.分组命名:
import re
ret = re.search(r'<(?P<tab1>w+)>(?P<content>w+)<\(w+)>',r'<title>qqxing< itle>')
print(ret.group(0)) # 不受到分组的影响
print(ret.group('tab1')) # 不受到分组的影响
print(ret.group('content')) # 不受到分组的影响
结果:
<title>qqxing< itle>
title
qqxing