re模块的使用
match()
import re
html01 = 'jd02jj03'
html02 = '8923jdjkkak12'
# 步骤一: 生成pattern对象
pattern = re.compile(r'\d+',re.I) #书写匹配规则 d+ : 表示匹配一个或多个数字 re.I 表示忽略大小写
#步骤2: 匹配01
#pattern.match()
'''
# 从初始位置匹配 返回结果是字符串
match方法用于查找字符串的头部(也可以指定起始位置),他是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有的匹配结果
语法如下:
math(string,pos[,endpos])
'''
res = pattern.match(html01) # 默认起始位置
print(res)
res = pattern.match(html01,2) #指定起始位置
print(res) # 匹配结果 <_sre.SRE_Match object; span=(2, 4), match='02'> 表示起始位置2,结束位置4 匹配结果 02
print(res.group()) #输出匹配结果
print(res.start())
print(res.span())
print(res.end())
res = pattern.match(html02)
print(res)
print(res.group())
pattern = re.compile(r'([a-z]+) ([a-z]+)')
res = pattern.match('hello world!')
print(res)
print(res.group(0))
print(res.group(1))
print(res.group(2))
===>打印结果:
None
<_sre.SRE_Match object; span=(2, 4), match='02'>
02
2
(2, 4)
4
<_sre.SRE_Match object; span=(0, 4), match='8923'>
8923
<_sre.SRE_Match object; span=(0, 11), match='hello world'>
hello world
hello
world
search()
import re
#search() 方法
'''
search方法用于查找字符的任何位置,他也是一次匹配,只要找到一个匹配的结果就返回,而不是查找所有的匹配结果
语法如下:
search(string,pos[,endpos])
当匹配成功时 返回一个Match对象,如果没有匹配上则返回 None
'''
html01 = 'hhekkkdk01'
html02 = '45djdjnak03'
pattern = re.compile(r'\d+') # 书写匹配规则
res = pattern.search(html01)
print(res)
print(res.group(0))
res = pattern.search(html02)
print(res)
print(res.group())
res = pattern.search(html02,3) #指定起始位置
print(res)
print(res.group())
res = pattern.search(html02,6,8) #指定结束位置
print(res)
pattern = re.compile(r'(\d+) (\d+)')
res = pattern.search('hello 12344 890')
print(res)
print(res.group())
print(res.group(1))
print(res.group(2))
===>打印结果
<_sre.SRE_Match object; span=(8, 10), match='01'>
01
<_sre.SRE_Match object; span=(0, 2), match='45'>
45
<_sre.SRE_Match object; span=(9, 11), match='03'>
03
None
<_sre.SRE_Match object; span=(6, 15), match='12344 890'>
12344 890
12344
890
findall()
import re
###findall
'''
全局匹配,返回所有的匹配结果
返回的结果是一个列表
'''
pattern = re.compile(r'\d+')
res = pattern.findall('hello 1234 89')
print(res)
===>打印结果:
['1234', '89']
finditer
#finditer方法
'''
finditer方法的行为跟findall的行为类似,也是搜索整个字符串 获取所有匹配的结果
但它返回一个顺序访问每一个匹配结果(Match对象)的迭代器
'''
pattern = re.compile(r'\d+')
res = pattern.finditer('hello 1234 89')
print(res) #
for i in res:
print(i.group())
===> 打印结果:
1234
89
split()
import re
#split方法
'''
split方法按照能够匹配的子串将字符分割后返回列表,他的使用形式如下:
split(string,maxsplit)
其中 maxsplit用于指定最大分割次数 不指定 将全部分割
返回值也是一个列表
'''
path = '/Users/applery/Desktop/TotalCode/requestFiles/0001.py'
pattern = re.compile(r'/')
res = pattern.split(path)
print(res)
res = pattern.split(path,4)
print(res)
===>打印结果:
['', 'Users', 'applery', 'Desktop', 'TotalCode', 'requestFiles', '0001.py']
['', 'Users', 'applery', 'Desktop', 'TotalCode/requestFiles/0001.py']
sub()
#sub方法:
'''
sub方法用于替换,它的使用形式如下:
sub(rep1,string[,count])
其中,rep1 可以是一个字符串也可以是一个函数
如果repl是字符串 则会使用repl1去替换字符串每一个匹配的子串,并返回替换后的字符串
另外,rep1 还可以使用id的形式来引用分组,但不能使用编号0;
如果rep1是函数 这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换
(返回的字符串中不能再引用分组)
count用于指定最多替换的次数 不指定时全部替换
'''
import re
pattern = re.compile(r'(\w+) (\w+)')
html = 'hello 123, hello 456'
res = pattern.sub('hello world',html)
print(res)
===>打印结果:
hello world, hello world