re模块
- 在python中想要使用正则必须借助于模块 re就是其中之一
基本操作方法
import re
res = 'sdaa213sad231df432g453dfd654'
1. re.findall('正则表达式', '待匹配内容') 根据正则表达式匹配所有符合条件的数据
print(re.findall('a', res))
print(re.findall('m', res))
2. re.search('正则表达式', '待匹配内容') 根据正则表达式匹配到一个符合条件的数据就结束
''' re.search 匹配成功得到是一个结果对象 没有匹配成功就会返回None '''
res1 = re.search('a',res)
print(res1)
print(re.search('m',res))
""" 需要通过调用group()才能调出正则匹配的结果 若没有匹配成功调用group就会报错 """
print(res1.group())
'''搭配使用可以防止报错'''
if res1:
print(res1.group())
else:
print('匹配未成功!')
3. re.match('正则表达式', '待匹配内容') 根据正则从头开始匹配(文本内容必须在开头匹配上)
res1 = re.match('a', 'abac')
res2 = re.match('b', 'abac')
''' re.search 匹配成功得到是一个结果对象 没有匹配成功就会返回None '''
print(res1)
"""如果没有符合条件的数据 那么match返回None 并且使用group会直接报错"""
print(res1.group())
print(res2)
re模块其他方法
import re
1. re.split() 切分
res = re.split('[ab]', 'abcd')
""" re 模块切分 会先按照'a'分割得到''和'bcd' 再对''和'bcd' 分别按'b'分割得到''和'cd' 并返回"""
print(res)
2. re.sub()
res = re.sub('\d','H','a1b2c3d4',1)
res1 = re.sub('\d','H','a1b2c3d4')
print(res)
print(res1)
'''sub类似于字符串类型的replac方法'''
3. re.subn()
"""返回元组 并提示替换了几处 用法同sub"""
res = re.subn('\d', 'H', 'a1b2c3d4', 1)
print(res)
res1 = re.subn('\d', 'H', 'a1b2c3d4')
print(res1)
4. re.compile() 将正则表达式编译成为一个 正则表达式对象
'常用方法, 正则表达式对象可以重复使用,类似于函数名 可以调用正则基本操作'
regexp_obj = re.compile('\d+')
res = regexp_obj.findall('a1b2c3d4e5')
res1 = regexp_obj.search('a1b2c3d4e5')
res2 = regexp_obj.match('1ab2c3d4e5')
print(res, res1, res2)
print(res1.group())
print(res2.group())
5. re.finditer() 返回一个存放匹配结果的迭代器
res = re.finditer('\d+','a1b2c3d4e5f6g7h8')
print(res)
print(next(res).group())
print(next(res).group())
print(next(res).group())
print([i.group() for i in res])
6. 无名分组与有名分组
findall针对分组优先展示 无名分组 分组( )
res = re.findall("^[1-9]\d{14}(\d{2}[0-9x])?$",'110105199812067023')
print(res)
res1 = re.findall("^[1-9]\d{14}(?:\d{2}[0-9x])?$",'110105199812067023')
print(res1)
有名分组(?p<名字>)
res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group())
print(res.group(1))
print(res.group(2))
print(res.group('xxx'))
print(res.group('ooo'))