#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')
- 多测师讲解python_os模块_高级讲师肖sir
#os.path.isfile()#:判断当前是否为文件,返回布尔值是文件则True否者Falsea_path='F:\cms搭建.rar' #lesson包b_path=r'D:\bao\kk '# ...
- 多测师讲解接口自动化测试 _requests_高级讲师肖sir
rep=requests.post 错误方法: 1.在代理中---把高级中----代理-----去除勾选,调用失败
- 多测师讲解rf--定位元素--高级讲师肖sir
注意点: 注意点: rfbug:rf 点击勾选一个运行就运行两个出现用例执行 注释快捷键: 改字体大小: 快捷键:显示关键字信息 (ctrl+鼠标悬浮) 注解不能空格在注解 未保存提示 定位方法 : ...
- 多测师讲解python函数 _open_高级讲师肖sir
open()函数 #open() 函数用于打开一个文件,创建一个 file 对象 #Python open() 函数用于打开一个文件,并返回文件对象, # 在对文件进行处理过程都需要使用到这个函数,如 ...
- 多测师讲解python函数 _zip_高级讲师肖sir
# zip函数 #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存.1.使用zip讲两个列表打印出来的结果是 ...
- 多测师讲解python _re模块_高级讲师肖sir
import re# 一.常用方法:# match():从头匹配# search():从整个文本搜索# findall():找到所有符合的# split():分割# sub():替换# group() ...
- 多测师讲解python_模块(导入模块和内置模块)_高级讲师肖sir
#自定义模块# from aaa import * #指定导入某个包中具体的类.函数.方法## A.fun1(2,2) #import +模块名 :# # import +模块名+.+.+# # 导入 ...
- 多测师讲解第一个月 _综合面试题_高级讲师肖sir
第一个月综合面试题 1. 冒烟测试是什么意思? 对主要的用例测试 2.你们公司的项目流程是什么? 3.你们公司的bug分几个级别? 4个 4.你对外键是怎么理解的? 你会使用外键吗?给一个表添加 ...
- 多测师讲解自动化测试 _RF关键字001_(上)_高级讲师肖sir
讲解案例1: Open Browser http://www.baidu.com gc #打开浏览器 Maximize Browser Window #窗口最大化 sleep 2 #线程等待2秒 In ...
随机推荐
- Java实现获取命令行中的指定数据
构造一个ping的命令类这个类中可以设置需要ping的目标域名类提供方法public void exec();方法执行完毕后可以读取ping的次数,ping的成功回应包个数ping的丢包个数,ping ...
- layui表单引入ueditor遇坑记
1. 错误示例:表单容器是div标签则无法获取ueditor的内容 注:对于普通的表单元素表单容器是div也都能获取 <!DOCTYPE html> <html> <he ...
- 关于Nginx mmap(MAP_ANON|MAP_SHARED, 314572800)报错
mmap 报错解决 今天修改了一下测试环境的Nginx的nginx.conf,然后做检测的时候报了一个错误 /usr/local/bin/nginx -c /usr/local/etc/openres ...
- Python 面试题 字符串 删除多少个字符使得出现做多的字符数量大于等于字符串长度的一半.
str1 = input() num = {} for i in set(str1): num[i]=str1.count(i) max_value = max(num.values()) n=abs ...
- .NET性能排查
概述 1,性能参数 2,性能排查方式 3,.NET的性能分析工具 1,性能指标 一个系统的性能排查或者性能设计的前提就是要有明确的性能指标:常见的性能参数 1.响应时间(处理任务时的延迟,简称 RT, ...
- 分布式事务框架.NetCore CAP总结
来自CAP原作者yang-xiaodong的原理图: 本文撰写者:cmliu,部分内容引用自官方文档,部分内容待更新# .NetCore CAP # 1,简介 CAP 是一个遵循 .NET Stand ...
- oracle之三rman 不完全恢复
rman 不完全恢复 9.1 rman 不完全恢复的三个标准模式:基于time.基于scn和基于sequence: 范例1:恢复过去某个时间点误操作,一般使用基于time或scn. 1)环境:有一套全 ...
- 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings)-课程笔记
第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings) 2.1 词汇表征(Word Representation) 词汇表示,目 ...
- linux 信号机制
文章目录 1. 实时信号非实时信号 2. 信号状态: 3. 信号生命周期: 4. 信号的执行和注销 信号掩码和信号处理函数的继承 信号处理函数的继承 信号掩码的继承 sigwait 与多线程 sigw ...
- ip子网掩码计算及子网划分
为什么要懂 子网掩码计算,及子网划分属于网络基础知识.一般在几个地方会用到: 公司避免产生网络风暴而划分子网,帮助路由器判断对应主机是否在同一个网段中 服务器相互隔离而划分子网,一般机房管理人员规划: ...