python之re模块使用

re模块

  • 在python中想要使用正则必须借助于模块 re就是其中之一

基本操作方法

import re 
res = 'sdaa213sad231df432g453dfd654'

1. re.findall('正则表达式', '待匹配内容')   根据正则表达式匹配所有符合条件的数据
# 结果是一个列表 能匹配上就有值 匹配不上就是个空列表
print(re.findall('a', res))  # ['a', 'a', 'a']
print(re.findall('m', res))  # []

2. re.search('正则表达式', '待匹配内容')   根据正则表达式匹配到一个符合条件的数据就结束
''' re.search 匹配成功得到是一个结果对象  没有匹配成功就会返回None '''
res1 = re.search('a',res)
print(res1)  # <_sre.SRE_Match object; span=(2, 3), match='a'>
print(re.search('m',res))  # None
""" 需要通过调用group()才能调出正则匹配的结果  若没有匹配成功调用group就会报错 """
print(res1.group())  # a
'''搭配使用可以防止报错'''
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)  # <_sre.SRE_Match object; span=(0, 1), match='a'>
"""如果没有符合条件的数据 那么match返回None 并且使用group会直接报错"""
print(res1.group())  # a
print(res2)  # None

在这里插入图片描述

re模块其他方法

import re

1. re.split() 切分
res = re.split('[ab]', 'abcd')
""" re 模块切分 会先按照'a'分割得到''和'bcd' 再对''和'bcd' 分别按'b'分割得到''和'cd' 并返回"""
print(res)  # ['', '', 'cd']

2. re.sub()
res = re.sub('\d','H','a1b2c3d4',1)  # 替换正则匹配到的内容
res1 = re.sub('\d','H','a1b2c3d4')  # 不写默认替换所有
print(res)  # aHb2c3d4
print(res1)  # aHbHcHdH
'''sub类似于字符串类型的replac方法'''

3. re.subn()
"""返回元组 并提示替换了几处 用法同sub"""
res = re.subn('\d', 'H', 'a1b2c3d4', 1)
print(res)  # ('aHb2c3d4', 1)
res1 = re.subn('\d', 'H', 'a1b2c3d4')
print(res1)  # ('aHbHcHdH', 4)

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)
# ['1', '2', '3', '4', '5'] <_sre.SRE_Match object; span=(1, 2), match='1'>
#                           <_sre.SRE_Match object; span=(0, 1), match='1'>
print(res1.group())  # 1
print(res2.group())  # 1


5. re.finditer()  返回一个存放匹配结果的迭代器
res = re.finditer('\d+','a1b2c3d4e5f6g7h8')
print(res)  # <callable_iterator object at 0x000002BB12572710> 迭代器对象
print(next(res).group())  # 1
print(next(res).group())  # 2
print(next(res).group())  # 3
print([i.group() for i in res])  # ['4', '5', '6', '7', '8']

6. 无名分组与有名分组
    findall针对分组优先展示  无名分组  分组( )
res = re.findall("^[1-9]\d{14}(\d{2}[0-9x])?$",'110105199812067023')
print(res)  # ['023']
# 取消分组优先展示  (?:)
res1 = re.findall("^[1-9]\d{14}(?:\d{2}[0-9x])?$",'110105199812067023')
print(res1)  # ['110105199812067023']

 	有名分组(?p<名字>)
res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9x])?$','110105199812067023')
print(res)  # <_sre.SRE_Match object; span=(0, 18), match='110105199812067023'>
print(res.group())  # 110105199812067023
print(res.group(1))  # 10105199812067  无名分组只能通过索引取值
print(res.group(2))  # 023

print(res.group('xxx'))  # 10105199812067  有名分组可以通过名字取值
print(res.group('ooo'))  # 023

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值