re 模块

re 模块
import re
findall
ret = re.findall('\d+', 'dkfjfjk9883kj23')
print(ret)  # ['9883', '23']
参数 正则表达式 待匹配的字符串
返回值 是一个列表 所有匹配到的项

search
ret = re.search('\d+', 'dkfjjf343kjdf34kjr')  # 匹配多个数字
print(ret)  # <re.Match object; span=(6, 9), match='343'>
print(ret.group())  # 343

ret = re.search('\d', 'fiefjfj596886594nv')  # 匹配一个数字
print(ret)
if ret:
    print(ret.group())  # 5
search
返回值:返回一个对象
通过group取值
且只包含第一个匹配到的值

需求
有个字符串‘2*3/4*5’, 需要我们不用eval,自己计算出这个表达式的结果
这个表达式只含有乘除法
ret = re.search('\d[*/][\d]', '2*3/4*5')
print(ret.group())
计算2*3
6 替换成2*3


ret = re.search('\d(\.\d)?[*/]\d', '1.5*5')
print(ret.group())

findall 有个特点, 会优先显示分组中的内容, 就是括号里面的内容才是我想要的,别的只是帮助定位的
ret = re.findall('(www)\.(baidu|sina)\.(com)', 'www.baidu.com')
print(ret)  # [('www', 'baidu', 'com')]
ret = re.findall('www\.(baidu|sina)\.com', 'www.baidu.com')
print(ret)  # ['baidu']
ret = re.findall('www\.(baidu)\.com', 'www.baidu.com')
print(ret)  # ['baidu']

ret = re.search('(www)\.(baidu|sina)\.(com)', 'www.baidu.com')
print(ret.group(0))  # www.baidu.com
print(ret.group(1))  # www
print(ret.group(2))  # baidu
print(ret.group(3))  # com


import re
从一个字符中获取要匹配的内容
findall 返回的是list
search  验证用户输入内容‘^正则规则$‘
ret = re.search('^\d+', '1545fl')
print(ret.group())  # 1545

match
ret = re.match('\d+', '52dld')
print(ret)  # <re.Match object; span=(0, 2), match='52'>
print(ret.group())  # 52

切割 split
s1 = 'laura|wendy|sida'
print(s1.split('|'))  # ['laura', 'wendy', 'sida']

s = '5846laura989wendy98sinala989'
ret = re.split('\d+', s)
print(ret)  # ['', 'laura', 'wendy', 'sinala', '']

ret = re.split('(\d+)', s)
print(ret)  # ['', '5846', 'laura', '989', 'wendy', '98', 'sinala', '989', '']

ret = re.split('\d(\d)', s)
print(ret)  # ['', '8', '', '6', 'laura', '8', '9wendy', '8', 'sinala', '8', '9']

替换sub
s = 'laura|wendy|sinala'
print(s.replace('|', '-'))  # laura-wendy-sinala

s1 = 'laura9898wendy7878sinila788'
ret = re.sub('\d+', '|', s1)    # 把s1中的数字用|代替
print(ret)  # laura|wendy|sinila|

ret = re.sub('\d+', '|', s1, 1)  # 把s1中的数字换成|,且只换一次
print(ret)  # laura|wendy7878sinila788

compile  编译正则规则
com = re.compile('\d+')
print(com)
ret = com.search('adkdfjk98kdffh7kjf88')  # 取第一个数字
print(ret.group())  # 98
ret = com.findall('kdjf98dkfj28kj99')
print(ret)  # ['98', '28', '99']
ret = com.finditer('kdfjjkf98k2j84')
for i in ret:
    print(i.group())
'''
98
2
84
'''
finditer  节省空间的方法
ret = re.finditer('\d+', 'kfjkfj998849jjf9d8')
print(ret)
for i in ret:
    print(i.group)

分组命名。分组约束
前端
<h1>函数</h1>
对于前端语言来说,都是把不同样式的字体放在不同标签中
标签语言

pattern = '<(?P<tag>.*?)>.*?</(?P=tag)>'
ret = re.search(pattern, '<h1>函数</h1>')
print(ret)  # <re.Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
    print(ret.group())  # <h1>函数</h1>
    print(ret.group())  # <h1>函数</h1>
    print(ret.group('tag'))  # h1

(?:正则表达式) 表示取消优先显示功能
(?P<组名>正则表达式)  表示给这个组起一个名字
(?P=组名)  表示引用之前组的名字,引用部分匹配到的内容必须和之前那个组的内容一模一样






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值