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=组名) 表示引用之前组的名字,引用部分匹配到的内容必须和之前那个组的内容一模一样
re 模块
最新推荐文章于 2023-03-10 15:45:00 发布