自动化测试学习(七)-正则表达式,你真的会用吗?

目录
一、正则表达式在python中如何使用
二、用正则表达式匹配更多模式
三、常用字符分类的缩写代码
总结
所谓正则表达式(regex),就是一种模式匹配,学会用正则匹配,就可以达到事半功倍的效果。
一、正则表达式在python中如何使用
1.导入正则表达式模块
# 导入re模块
import re
2.创建正则表达式对象,以电话号码为例
# 使用re.compile()方法创建一个Regex对象,模式为'\d\d\d-\d\d\d-\d\d\d\d'
test_regex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
Tips:在字符串的第一个引号前面加个r,代表将该字符串标识为原始字符串,不包含转义字符
3.匹配正则表达式
使用Regex的search()对象查找传入的字符串,寻找该正则表达式的所有匹配。
# 使用search()方法传入要匹配的字符串,并返回一个match对象
mo=test_regex.search('My number is 415-425-2222.')
4.输出匹配文本的字符串
如果没有找到该正则表达式模式,serch()将返回None。
如果找到了该模式,则返回一个Match对象。Match对象有一个group()方法,返回被查找字符串中实际匹配的文本。
# 输出匹配的字符串
print(mo.group())
运行结果如下:

二、用正则表达式匹配更多模式
1.利用括号分组,比如分为两组,区号和号码
①group()方法传入1代表第一组,2代表第二组,0或不传代表全部
test_regex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo=test_regex.search('My number is 415-425-2222')
# 返回区号
print(mo.group(1))
# 返回全部匹配
print(mo.group())
运行结果如下:

②如果想一次获取所有分组,需要使用groups(),该方法将以元组的形式返回所有分组
test_regex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo=test_regex.search('My number is 415-425-2222')
#返回所有分组
print(mo.groups())
运行结果如下:

2.用管道符(|)匹配多个分组
如果想同时匹配hello,python,就可以使用hello|python。search()方法是返回第一个匹配的字符,findall()则返回所有的匹配,返回对象类型为字符串列表。
test_regex=re.compile('hello|python')
mo1=test_regex.search('hello,python')
print(mo1.group())
mo2=test_regex.search('python,hello')
print(mo2.group())
mo3=test_regex.findall('python,hello')
print(mo3)
运行结果如下:

3.用问号实现0次或1次匹配
(mode)?括号里面即为模式,mode出现0次或1次均可成功匹配。
test_regex=re.compile('(fe)?male')
mo1=test_regex.search('This cat is male.')
print(mo1.group())
mo2=test_regex.search('This cat is female')
print(mo2.group())
运行结果如下:

4.用星号匹配0次或多次
(mode)*,mode出现0次或多次均可匹配成功。
test_regex=re.compile('a(ha)*~')
# 匹配0次
mo1=test_regex.search('my blog name is a~')
print(mo1.group())
# 匹配两次
mo2=test_regex.search('my blog name is ahahaha~')
print(mo2.group())
运行结果如下:

5. 用加号匹配一次或多次
(mode)+,mode出现1次或多次均可匹配成功。
test_regex=re.compile('a(ha)+')
# 匹配1次
mo1=test_regex.search('aha')
print(mo1.group())
# 匹配多次
mo2=test_regex.search('ahahaha')
print(mo2.group())
运行结果如下:

6.用花括号匹配特定次数
(mode){n},mode匹配n次即可匹配成功。
# 匹配两次
test_regex=re.compile('a(ha){2}')
mo=test_regex.search('ahaha~')
print(mo.group())
运行结果如下:
另外,还可以给个范围,例如 (mode){n,m},出现n次到m次均可匹配。 (mode){,m}表示0到m次均可匹配。 (mode){n,}表示大于等于n次均可匹配。
test_regex=re.compile('a(ha){2,3}')
mo=test_regex.search('ahahaha')
print(mo.group())
运行结果如下:
我们可以发现ahaha和ahahaha均可匹配,但是正则匹配到的是ahahaha,因为正则表达式的匹配默认是贪心的,会尽量匹配最长的字符串,若想匹配最短的字符串,可在后面加个问号,即(mode){n,m}?。
test_regex = re.compile('a(ha){2,3}?')
mo = test_regex.search('ahahaha')
print(mo.group())
运行结果如下:

三、常用字符分类的缩写代码
| 缩写字符 | 表示 |
| \d | 0-9的任何数字 |
| \D | 除0-9的数字以外的任何字符 |
| \w | 任何字母、数字或下划线字符 |
| \W | 除字母、数字和下划线以外的任何字符 |
| \s | 匹配空白字符 |
| \S | 除空格、制表符和换行符以为的任何字符 |
-可以表示字母或数字的范围,如[0-9]表示数字0-9,[a-z]表示所有小写字母a-z。
^放在【之后,可以表示非字符类,如[^0-9]表示匹配非0-9的其他字符。
^放在正则表达式开始处,表示必须以正则表达式的模式开始。
$放在正则表达式的结尾处,表示必须以正则表达式的模式结束。
.表示通配符,即匹配除了换行之外的所有字符,代表1个字符。
.*匹配除换行外的所有字符,.代表1个字符,.*代表零次或多次。该表示方法是贪心模式,及尽可能多的匹配字符,若要尽可能少的匹配字符,则在后面加上问号,即.*?。
在re.compile()的第二个参数传入re.DOTALL,.*即可匹配所有字符,包含换行符。
总结:
| 表示 | 描述 |
| ? | 匹配0次或1次 |
| * | 匹配0次或多次 |
| + | 匹配1次或多次 |
| {n} | 匹配n次 |
| {n,} | 匹配大于等于n次 |
| {,m} | 匹配0-m次 |
| {n,m} | 匹配n-m次 |
| {n,m}? | 尽可能少的匹配(非贪心模式) |
| ^haha | 以haha开头 |
| haha$ | 以haha结尾 |
| . | 匹配1个除换行符外的所有字符 |
| .* | 匹配任意个除换行符外的所有字符 |
| [aeiou] | 匹配[]内的任意字符 |
| [^aeiou] | 匹配非[]内的任意字符 |
相关文章:
自动化测试学习(七)-正则表达式,你真的会用吗?
目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式(regex),就是一种模式匹配,学会用正则匹配,就可以达到事半功倍的效果。 一、正则表达式在…...
验证码——vue中后端返回的图片流如何显示
目录 前言 一、p调用接口获取验证码 canvas画布渲染? 二、后端返回图片(图片流),前端显示 1.blob 2.arraybuffer 总结 前言 登录界面经常会有验证码,验证码的实现方式也有很多,我目前做过以下两种&…...
聚观早报 | 拼多多驳斥Google的指控;80%美国人工作将被AI影响
今日要闻:拼多多驳斥Google“恶意软件”的指控;80%美国人工作将被AI影响;iPhone 15 Pro设计图上热搜;贾扬清离职阿里投身AI大模型创业;OPPO Find X6 系列发布拼多多驳斥Google“恶意软件”的指控 3 月 21 日࿰…...
define,typedef,inline 的区别
define 1.用于在代码中创建宏定义,将一个标识符替换为一个表达式或语句。例如: #define PI 3.14159 #define SQUARE(x) ((x) * (x))这样,程序中所有出现的 PI 都将被替换为 3.14159,SQUARE(x) 则被替换成了 (x) * (x)。 使用 #…...
百度文心一言正式亮相
OpenAI 刚发布了 GPT-4,百度预热已久的人工智能生成式对话产品也终于亮相了。昨天下午,文心一言 (ERNIE Bot)—— 百度全新一代知识增强大语言模型、文心大模型家族的新成员,正式在百度总部 “挥手点江山” 会议室里发布。 发布会一开场&…...
使用Android架构模板
使用Android架构模板 项目介绍 为了方便开发者引入最新的Android架构组建进行开发,Google官方给我们引入了一个架构模板,方便我们快速进入开发。 github地址: https://github.com/android/architecture-templates 该模板遵循官方架构指南 …...
2023年天津市逆向re2.exe解析-比较难(超详细)
2023年天津市逆向re2.exe解析(较难) 1.拖进IDA里进行分析2.动态调试3.编写EXP脚本获取FLAG4.获得FLAG1.拖进IDA里进行分析 进入主程序查看伪代码 发现一个循环,根据行为初步判定为遍历输入的字符并对其ascii^7进行加密 初步判断sub_1400ab4ec为比较输入和flag的函数 跟进u…...
springboot: mybatis动态拼接sql查询条件
目录 需求01: 根据不同类型 查询不同的订单名, 1. 书写订单 类型转换方法 2. 使用方式: 3.. 构建条件构造器并进行查询, 传递查询参数 4. Mapper 写法 5. 最核心位置 xml位置 6. sql执行效果: 需求01: 根据不同类型 查询不同的订单名, 条件也是不同的, 需要复用sql…...
最优化算法 - 动态规划算法
动态规划算法简介 动态规划(Dynamic programming)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题…...
springCloud学习【3】之Docker(1)
文章目录一 Docker环境准备1.1 应用部署的环境问题1.2 Docker简介1.3 Docker解决操作系统环境差异1.4 Docker和虚拟机的区别1.5 Docker架构1.5.1 镜像和容器1.5.2 DockerHub1.5.3 Docker架构1.5.4 Docker工作流1.6 Docker的安装和启动1.7 安装步骤1.8 启动Docker1.9 配置镜像加…...
难以置信,已经有人用 ChatGPT 做 Excel 报表了?
要问2023年初科技领域什么最火,那自然是 ChatGPT。 ChatGPT 由人工智能研究实验室 OpenAI 于2022年11月30日推出。上线短短5天,用户数量已突破100万,在今年2月份,用户数量已经突破1亿。 ChatGPT 是一个超级智能聊天机器人&#…...
中断相关操作函数HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
文章目录HAL_NVIC_SetPriority():设置中断优先级HAL_NVIC_EnableIRQ():使能中断结束HAL_NVIC_SetPriority():设置中断优先级 HAL_NVIC_SetPriority()函数是一个用于设置中断优先级的函数,其定义如下: void HAL_NVIC_…...
企业增长秘诀丨设立优质的帮助中心,加深用户产品使用深度,促进产品转化
客户的留存问题一直备受企业关注,留存率的高低反应了产品的真实状况,将直接影响企业后期的发展规划。下文将为大家剖析下产品中客户的转化流程,以及如何提高产品的使用深处与复购率。 产品中,从客户生命周期角度,可分…...
3.OSPF与BGP的联动
14.3实验3:OSPF与BGP联动配置 实验目的实验拓扑实验步骤 配置IP地址 AR1的配置 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]sysname AR1 …...
机器学习算法——决策树详解
文章目录前言:决策树的定义熵和信息熵的相关概念信息熵的简单理解经典的决策树算法ID3算法划分选择或划分标准——信息增益ID3算法的优缺点C4.5算法信息增益率划分选择或划分标准——Gini系数(CART算法)Gini系数计算举例CART算法的优缺点其他…...
配置Jenkins
目录 一.前言 1.1简介 1.2工作步骤图 二.配置jenkins部署项目 2.1项目新建 2.2jenkinsfile文件如下 三.jenkins工作台配置 3.1.点击新建item进入新建页面,输入任务名称,选择pipeline 3.2.选择第二个配置 3.4将ideal中jenkinsfile文件的路径粘入脚本路径中 3.5启动项目…...
【STL三】序列容器——array容器
【STL三】序列容器——array一、array简介二、头文件三、模板类四、成员函数1、迭代器2、元素访问3、容量4、操作五、demo1、容量(不使用迭代器)2、使用迭代器3、元素访问 at()、front()、back()、data()一、array简介 array 容器是 C 11 标准中新增的序…...
【STL四】序列容器——vector容器
【STL容器】序列容器——vector容器一、简介二、头文件三、模板类四、成员函数1、迭代器2、元素访问3、容量4、修改操作五、demo1、容量reserve、capacity、shrink_to_fit2、修改操作pop_back()、push_back3、修改操作insert()4、修改操作emplace()5、修改操作erase()、swap()、…...
4年功能测试,我一进阶python接口自动化测试,跳槽拿了20k......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 很多人在这求职市场…...
基于Pytorch的可视化工具
深度学习网络通常具有很深的层次结构,而且层与层之间通常会有并联、串联等连接方式。当使用PyTorch建立一个深度学习网络并输出文本向读者展示网络的连接方式是非常低效的,所以需要有效的工具将建立的深度学习网络结构有层次化的展示,这就需要…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
