#import re
一、我们就re模块(也叫正则模块)介绍:
实现一个编译查找,一般在日志处理或者文件处理时用的比较多
正则表达式主要用于模式匹配和替换工作。
预定义字符集匹配:
\d:数字0-9
\D:非数字
\s:空白字符
\n:换行符
\r:回车符
re模块数量词匹配:
符号^:表示的匹配字符以什么开头
符号$:表示的匹配字符以什么结尾
符号*:匹配*前面的字符0次或n次
eg:ab* 能匹配a 匹配ab 匹配abb
符号+:匹配+前面的字符1次或n次
符号?:匹配?前面的字符0次或1次
符号{m}:匹配前一个字符m次
符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
正整数
1、match (读音:马区,意思:匹配)
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
2、search(读音:色区 ,意思:搜索)
从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
3、findall (意思:查找所有匹配结果)
从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]
4、compile(读音:肯排偶 意思:编译)
编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
1、match方法
match 方法用于从字符串的头部开始匹配,仅返回第一个匹配的结果~
pattern.match(string[, pos[, endpos]]) 或 re.match(pattern, string[, flags])
pattern.match(string[, pos[, endpos]]) 中的 pos,endpos指定字符串匹配的起始和终止位置,这两个均为可选参数,若不指定,默认从字符串的开头开始匹配~
# a="2233113abf123"
#匹配当前字符串中的:\d规则 整数 1个整数 ,匹配到后则不贪婪,如果匹配第一个值不少\d 的格则抛异常
# yy=re.match("\d",a)
# print (yy.group())
#打印结果:2
# #带+ 和不带+号的区别:不带+号则值匹配一个或一次,
# #带+号则匹配1词或多次
# y1=re.match( '\d+',a)
# print (y1.group())
# c="a123asdf12" #注意不能以字母开头
# y=re.match('\d',c)
# print(y.group())
#运行结果:有问题 AttributeError: 'NoneType' object has no attribute 'group'
import re
#re.match 从字符串的起始位置开始匹配,如果起始位置匹配不成功的话,match()就返回none
#a="2233113abf123"
#yy=re.match('\ ,a')
#print(yy.group())
# 打印结果:TypeError: match() missing 1 required positional argument: 'string'
#意思是:TypeError: match()缺少1个必需的位置参数:'string'
#大写的D:匹配非数字
# c="@@##!!abc123sad"
# y=re.match("\D{4}","c")
#print(y.group()) #报错了
#
# y1=re.match("\D{3,10}","c")
# print(y1.group())
# y1=re.match('\D+',c)
# print(y1.group()) #打印结果显示:@@##!!abc
2、compile方法
re.compile(pattern[, flag])
步骤: 1)使用 re.compile 方法(传入正则表达式)得到 Pattern 对象 2)通过 Pattern 对象提供的方法对字符串进行匹配查找,返回一个 Match 对象(包含了匹配结果) 3)使用 Match 对象提供的方法获取匹配结果
示例:
import re pattern = re.compile(r'\d+') # 返回一个 Pattern 对象 m = pattern.match('123abc456') # 返回一个 Match 对象 print(m.group()) # 输出匹配结果:123
示例中的 compile 方法用于编译正则表达式,返回一个 Pattern 对象,可利用 Pattern 对象中的一系列方法对字符串进行匹配查找。Pattern 对象中的常用方法包括:match,search,findall,finditer,split,sub,subn。当然这些方法也可以使用 re模块直接调用# 输出匹配的完整字符串 print(m.group()) # 123abc456 # 同上,输出匹配的完整字符串 print(m.group(0)) # 123abc456 # 从匹配的字符串中获取第一个分组 print(m.group(1)) # 123 # 从匹配的字符串中获取第二个分组 print(m.group(2)) # abc # 从匹配的字符串中获取第三个分组 print(m.group(3)) # 456 # 从匹配的字符串中获取所有分组,返回为元组 print(m.groups()) # ('123', 'abc', '456') # 获取第二个分组 在字符串中的起始位置(分组第一个字符的索引),start方法的默认参数为0,即字符串的起始索引 print(m.start(2)) # 3 # 获取第二个分组 在字符串中的起始位置(分组最后一个字符的索引+1),通start方法,end方法的默认参数也为0,即字符串结尾的索引+1 print(m.end(2)) # 6 # 第三个分组的起始和结束位置,即 (start(3), end(3)) print(m.span(3)) # (6, 9) # 同 (start(), end()) print(m.span()) # (0, 9)
# import re
# a="1!2!3!4asdf567"
# # yy =re.findall("\d",a)
# # print(yy)
# # #打印结果:['1', '2', '3', '4', '5', '6', '7']
# # y1 =re.findall("\d+",a)
# # print (y1)
# # #打印结果:['1', '2', '3', '4', '567']
# y2=re.findall("\D" ,a)
# print(y2) #打印结果:['!', '!', '!', 'a', 's', 'd', 'f']
# y3=re.findall('\D+',a)
# print(y3)#打印结果:['!', '!', '!', 'asdf']
# y4=re.findall('\+{2}',a)
# print(y4)#打印结果: []
# y5=re.findall('\d{1,4}',a)
# print (y5) #打印结果:['1', '2', '3', '4', '567']
import re
yy =re.compile('\d') #['1', '2', '3', '4', '5', '6', '7']
y1 =re.compile('\d+') #['1', '2', '3', '4', '567']
y2 =re.compile('\D') #['!', '!', '!', 'a', 's', 'd', 'f']
y3 =re.compile('\D+') #['!', '!', '!', 'asdf']
#
3、findall 方法
match方法 和search方法 仅会返回一个结果,findall方法会将字符串中的所有匹配结果以列表的形式返回,注意,返回的是列表,不是 Match 对象~
indall(string[, pos[, endpos]]) # 可选参数 pos,endpos 用于指定查找的起始位置和结束位置,默认 pos 为0,endpos为字符串长度
all=yy.findall('1!2!3!4asdf567')
print(all) #['1', '2', '3', '4', '5', '6', '7']
a1=y1.findall('sdafdsa')
print(a1) #[]
a2=y2.findall('123456sdafdsa123456')
print (a2) #打印结果:['s', 'd', 'a', 'f', 'd', 's', 'a']
a3=y3.findall('123safds123')
print(a3) #打印结果:['safds']
c="nihaohello,henhaohello"
y3=re.compile('hello')
a=y3.findall(c)
print (a) #显示结果['hello', 'hello']
pattern = re.compile(r'[a-z]+')
res = pattern.findall('123abc456cde')
print(res)
2、search 方法 ( 读音:色区 ,意思:搜索,寻找商品)
不同于match方法的从头开始匹配,search方法用于在字符串中的进行查找(从左向右进行查找),只要找到一个匹配结果,就返回 Match 对象,若没有则返回None~
search(string[, pos[, endpos]]) # 可选参数 pos,endpos 用于指定查找的起始位置和结束位置,默认 pos 为0,endpos为字符串长度
4、
pattern = re.compile('([0-9]*)([a-z]*)([0-9]*)') m = pattern.match('123abc456')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架