#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向上转型神解析
向上转型 经典案例 向上转型 向上转型应注意的问题 向上转型的好处 静态方法的调用 经典案例 public class Animal { public void eat(){ System.out.p ...
- 转载: Nginx 通览
转载地址:https://developer.51cto.com/art/201912/608365.htm Nginx 简介 Nginx 是一个免费.开源.高性能.轻量级的 HTTP 和反向代理服务 ...
- 记一次奇怪的cookie丢失
.net给Image控件设置一个空图片路径的时候出现丢失cookie 比如说, img_path.ImageUrl ="../"+ ds.Tables[0].Rows[0][&q ...
- 【GIT-精讲】从零玩转Git/GitHub/GitLab
关于版本控制 一.什么是版本控制 版本控制(Version Control Systems)版本控制(Revision control)是一种软件工程技巧 在开发的过程中,确保由不同人所编辑的同一档案 ...
- Node.js连接MongoDB数据库
首先要启动MongoDB服务器 先找到你的mongoDb安装目录,我的如下:就在bin文件夹下创建一个data文件夹,data内包含两个空文件夹,如下: 接着回到bin文件夹处,按住shift键,右击 ...
- Mybatis的Mapper中的方法为什么不能重载?
目录 前言 环境配置 错误示范 为什么不能重载? 如何找到XML中对应的SQL? 总结 前言 在初入门Mybatis的时候可能都犯过一个错误,那就是在写Mapper接口的时候都重载过其中的方法,但是运 ...
- python的运算符及数据类型的转换
python 目录 python 1.算术运算符 2.比较运算符 3.赋值运算符和复合赋值运算符 4.位运算符 5.逻辑运算符 6.成员运算符 7.身份运算符 8.常见的数据类型转换 1.算术运算符 ...
- 在windows下使用pip安装python包遇到缺失stdint.h文件的错误
今天在windows上使用pip安装一个python包python-lzf时遇到如下的错误: fatal error C1083: Cannot open include file: 'stdint. ...
- C# 中 Struct 和 Class 的区别总结
翻译自 Manju lata Yadav 2019年6月2日 的博文 <Difference Between Struct And Class In C#>,补充了一些内容和示例. 结构体 ...
- yum 安装提示公钥安装失败,Public key for .x86_64.rpm is not instal 手动导入公钥方案
Linux 中yum 安装google-chrome-stable时,报错如下,提示公钥安装失败,原因是 GPG公钥获取失败,无法连接获取到 https://dl-ssl.google.com/lin ...