Python自动化测试-正则表达式解析
——————·今天距2021年还有315天·——————
这是ITester软件测试小栈第97次推文
对于正则表达式,第一眼时觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完全不知所云。其实唯一难的就是组合起来之后,可读性比较差,而且不容易理解,其实能看得懂简单的正则表达式,写得出简单的正则表达式,用以满足日常的需求即可。学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改实践。
一
正则表达式说明
1.简介
正则表达式(regular expression)是一种特殊的字符串模式(pattern),用于匹配一组字符串,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
通俗的说,正则表达式好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。
2.常用的正则匹配工具
在线匹配工具:
http://www.regexpal.com/
http://rubular.com/
正则匹配软件:McTracer
3.正则匹配的用途
匹配验证: 判断给定的字符串是否符合正则表达式所指定的过滤规则,从而可以判断某个字符串的内容是否符合特定的规则(如email地址、手机号码等),当正则表达式用于匹配验证时,通常需要在正则表达式字符串的首部和尾部加上^和$,以匹配整个待验证的字符串。
查找与替换: 判断给定字符串中是否包含满足正则表达式所指定的匹配规则的子串,如查找一段文本中的所包含的IP地址。另外,还可以对查找到的子串进行内容替换。
字符串分割与子串截取: 基于子串查找功能还可以以符合正则表达式所指定的匹配规则的字符串作为分隔符对给定的字符串进行分割。
二
正则表达式简介
1.元字符
正则表达式中的字符分为 普通字符 和 元字符。大多数字符都将简单地匹配它们的自身值,它们被称为普通字符,如数字(0-9)
,字母(a-z, A-Z)
等,除了特殊元字符之外的所有字符都是普通字符。
代码 | 说明 |
. | 匹配除换行符以外的任意字符 |
\ | 将下一个字符标记为一个特殊字符 |
\w | 匹配字母,数字,下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字,等价于[0-9] |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
[abc] |
字符组,匹配包含括号内元素的字符 |
2.反义字符
代码/语法 | 说明 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^abc] | 匹配除了abc字母以外的任意字符 |
3.字符次数匹配
贪婪(贪心) ,如"*
"字符 贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果 失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。相比下面两种贪婪量词对资源的消耗是最大的。
懒惰(勉强) 如 "?
" 懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。
占有 如"+
" 占有量词会覆盖目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金。
代码/语法 | 说明 |
* | 贪婪:重复零次或更多次 |
+ | 懒惰:重复一次或更多次 |
? | 占有:重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
4.懒惰限定符
代码/语法 | 说明 |
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
贪婪模式与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配;非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。另外,非贪婪模式只被部分NFA引擎所支持。从匹配效率上来看,能达到相同匹配结果时,贪婪模式的匹配效率通常会比较高,因为它回溯过程会比较少。
5.捕获分组
代码/语法 | 说明 |
(exp) |
匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp,并捕获文本到名称为name的组里 |
(?:exp) |
匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
(?=exp) |
匹配exp前面的位置 |
(?<=exp) |
匹配exp后面的位置 |
(?!exp) |
匹配后面跟的不是exp的位置 |
(?<!exp) |
匹配前面不是exp的位置 |
三
正则表达式优先级
正则表达式从左到右进行计算,并遵循优先级顺序。相同优先级的从左到右进行运算,不同优先级的运算先高后低。
下表为从高到低排列各种正则表达式运算符的优先级顺序:
运算符 | 描述 |
\ | 转义符 |
(), (?:), (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,"或"操作 |
四
正则表达式常用实例
1.匹配一个URL地址
http或http链接可以这样写:
(https?://)?[\S]+
2.匹配一个IP地址
简单写法:
(\d+[.]){3}\d+
严谨写法:
(((?:[1-9]\d?)|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))[.]){3}((?:[1-9]\d?)|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))
3.匹配一个邮箱地址
保证只出现一个@符:
[^\s@]+@[^\s@]+\.[^\s@]+
匹配网易邮箱:6-18个字符,只能包含字母、数字和下划线,且只能以字母开头
[a-zA-Z]\w{5,17}@(126|163)\.com
匹配qq邮箱:3-18个字符,只能包含字母、数字、点、减号和下划线
[\w.-]{3,18}@qq\.com
匹配网易邮箱和qq邮箱:
(?:[a-zA-Z]\w{5,17}@(126|163)\.com)|(?:[\w.-]{3,18}@qq\.com)
4.匹配密码是否合法
要求为非空字符且限定密码长度为6-18位
^\S[6-18]$
必须同时包含含数字、大小字母、小写字母和标点符号
(?=^.{6,8}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W+)
必须同时包含且只能包含数字、大小字母、小写字母和标点符号
(?=^[\d\Wa-zA-Z]{6,8}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W+)
5.匹配大陆身份证号
15位和18位身份证号
(\d{2}|\d{4})-((0?[1-9])|(1[0-2]))-((0?[1-9])|([12][0-9])|(3[01]))
6.匹配日期
年月日
(\d{2}|\d{4})-((0?[1-9])|(1[0-2]))-((0?[1-9])|([12][0-9])|(3[01]))
7.匹配24小时制时间
(((0?|1)[0-9])|(2[0-3])):([0-5][0-9]):([0-5][0-9])
8.匹配QQ号码
[1-9]\d{4,}
9.匹配手机号
1[356789]\d{9}
10.匹配大陆固定手机号
(\d{3,4}-)?\d{7,8}
11.匹配大陆邮政编码
\d{6}
12.其他常用正则表达式
匹配内容 | 正则表达式 |
汉字 | [\u4e00-\u9fa5] |
中文及全角标点符号 | [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee] |
不含abc的单词 | (?=\w+)(?!abc) |
正整数 | [1-9]+ |
负整数 | -[1-9]+ |
非负整数(正整数+0) | [1-9]+ |
非正整数(负整数+0) | -[1-9]+ |
整数+0 | -?[1-9]+ |
正浮点数 | \d+.\d+ |
负浮点数 | -\d+.\d+ |
浮点数 | -?\d+.\d+ |
最后是今天的分享:正则表达式匹配工具 McTracer
ITester软件测试小栈今日分享
分享内容
正则表达式匹配工具 MCTracer
领取方式
微信公众号后台回复:MCTracer
有图有真相
推荐理由:
1.支持将正则导成对应的语言如java /C#/ js等;
2.支持转义,Copy方便;
3.支持正则表达式用法解释,如哪里是捕获分组,哪段是贪婪匹配。
以上
That‘s all
更多系列文章
敬请期待
ITester软件测试小栈
往期内容宠幸
叮—这有一打让你666的测试终极资料包,请查收!
打开PyCharm永久激活的这两个锦囊,再也不用担心写代码的时候让我付费了!
QQ空间面试题放送,速度教科书式扑街补救offer!
金九银十加薪季,测试题预热一波。
测试面试题集-测试基础理论
测试面试题集-测试用例设计:登录、购物车、QQ收藏表情、转账、充值、提现
测试面试题集-生活物品测试:杯子、伞、钢笔、桌子
Fiddler基本使用
Fiddler抓包介绍
速看,APP测试之ADB最全指南!
APP测试之Monkey压力测试(一)
APP测试之Monkey压力测试(二)
Python接口自动化-接口基础(一)
Python接口自动化-接口基础(二)
快来星标 置顶 关注我
后台 回复资源取干货
回复答题挑战玩转答题
想要获取相关资料和软件 ?
测试交流Q群:727998947
Python自动化测试-正则表达式解析相关推荐
- python爬虫正则表达式实例-python爬虫 正则表达式解析
这篇文章主要介绍了python爬虫 正则表达式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 - re.I # 忽略大小写 - re.M # 多 ...
- python自动化办公实例-python自动化测试实例解析
本文实例讲述了python自动化测试的过程,分享给大家供大家参考. 具体代码如下: import unittest ########################################## ...
- python自动测试m_python自动化测试实例解析
本文实例讲述了python自动化测试的过程,分享给大家供大家参考. 具体代码如下: import unittest ########################################## ...
- Python中正则表达式用法 重点格式以这个为准_首看_各种问题
20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...
- python自动化测试框架pytest.pdf_Python自动化测试框架
随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架.只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间.而且由于这些框架被广泛使用,他们具有很好的 ...
- python的网页解析器_网页解析器(BeautifulSoup)-- Python
分享一下关于 Python的网页解析器(BeautifulSoup) BeautifulSoup解析器 为了实现解析器,可以选择使用正则表达式.html.parser.BeautifulSoup.lx ...
- 7个实用的Python自动化测试框架
目录 前言 1.Unittest 2. Doctest 3.pytest 4.Nose 5.tox 6.Unittest2 7.mock unittest. 结语 前言 随着技术的进步和自动化技术的出 ...
- python自动化测试学习笔记合集
python自动化测试学习笔记-1 一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行 ...
- Python之正则表达式与JSON
Python之正则表达式与JSON 1.定义 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配. 可以快速检索文本,实现一些替换文本的操作 a = 'C|C++|C# ...
最新文章
- 同为 Java 开发:有了这些 Java 项目经历,面大厂稳了!
- JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...
- 【枚举】连续自然数和(jzoj 2102)
- linux c字符连接,C 语言实例
- 开放搜索助力提升趣店商城20%转化率
- Linux安装Bitbucket7.6.0教程-绝对干货满满
- Redux技术架构简介
- 酒店小程序线上营销解决方案-思途智旅
- 漫天繁星构成文字情话
- java pdf打印解决方案,将pdf转为图片进行打印
- QQ安装包内置UE4是什么意义呢?会不会是奔着元宇宙,搭载了虚幻引擎的QQ在渲染数字孪生上表现更强劲?
- Android studio课程设计开发实现---日记APP
- [Leetcode] 625. Minimum Factorization 解题报告
- python函数增强代码可读性_如何提高代码的可读性 学习笔记
- mtk-disp开篇:名词扫盲
- 全面解析增资扩股不属于股权转让的原因
- 多目标/单-VRT路径规划-更新汇总
- 无人机航线规划软件[航线通]
- 成人高考中湖南师范大学录取分数线是
- 深度强化学习 - 无人驾驶自行车
热门文章
- 杭电1425 sort
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- ftk学习记(image显示篇)
- c语言万年历程序设计方案,万年历程序设计c语言代码
- python中pow_如何在python中找到pow(a,b,c)的反向?
- 戴尔电脑开机黑屏怎么办_电脑黑屏开不了机怎么办
- mysql 日志文件_Mysql 日志文件类型
- python中的优化器有哪些_Python SciPy 优化器(Optimizers)
- mysql存储过程核销_mysql存储过程
- 我的世界基岩版json_我的世界基岩版下载_我的世界基岩版app下载_我的世界基岩版官网最新版下载-新手游网...