re模块

一.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

  

原文地址:https://www.cnblogs.com/Zhao159461/p/10578897.html