python中正则表达式的使用
前言:
我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据,今天在这边和大家聊聊如何在python中使用正则表达式。在python使用正则表达式,可以使用官方库re来实现
一、re模块的使用
在python中使用正则表达式,需要用到re模块来进行操作,这边给大家介绍几个re模块中常用的方法。
1、re.match函数
参数说明:接收两个参数,
- 第一个是匹配的规则,
- 第二个是匹配的目标字符串,
re.match尝试从字符串的起始位置匹配一个模式,匹配成功 返回的是一个匹配对象(这个对象包含了我们匹配的信息),如果不是起始位置匹配成功的话,match()返回的就是空。
案例:
2、re.search方法
参数说明:接收两个参数,
- 第一个是匹配的规则,
- 第二个是匹配的目标字符串,
re.search 扫描整个字符串并返回第一个成功的匹配。
案例:
re.match与re.search的区别
- re.match从字符串的开始位置进行匹配,如果字符串开始不符合正则表达式,则匹配失败,函数返回空;
- 而re.search匹配整个字符串,直到找到一个匹配成功的则进行返回,如果整个字符串中都没有找到匹配成功的,则返回空
3、findall方法
参数说明:接收两个参数,
- 第一个是匹配的规则,
- 第二个是匹配的目标字符串,
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
案例:
注意: match 和 search 是匹配一个结果, findall 匹配处所有符合规则的结果。
4、sub方法
替换字符串中的某些字符,可以用正则表达式来匹配被选子串。
re.sub(pattern, repl, string, count=0 )
参数:
- pattern:匹配的规则;
- repl:匹配之后替换的新内容;
- string:需要按规则替换的字符串;
- count:替换的次数,可以不传参,默认替换所有符合规则的。
案例:
5、贪婪模式说明:
贪婪模式:Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;
如下案例:有一个字符串s,我们需要在字符串中匹配3个以上的数字,字符串中数字有8个,贪婪模式会尽可能匹配更多字符,3个以上,8个也是3个以上,那么这里匹配的结果就是8个数字。
非贪婪模式:总是尝试匹配尽可能少的字符,在"*","?","+","{m,n}",{m,}后面加上?,可以关闭贪婪模式
关闭贪婪模式之后,尽可能获取更少的,如下,只获取到最前面的3个数值(规则时至少3个,非贪婪就是匹配最前面符合规则的3个数组)
关于re模块,更多的使用方法,本文不做过多的介绍,大家自行研究,谢谢!下面附上正则表达式的基本的匹配供大家参考
二、正则表达式语法
1、表示单字符
单字符:即表示一个单独的字符,比如匹配数字用\d ,匹配非数字使用\D,具体规则如下:
字符 |
功能 |
. |
匹配任意1个字符(\n除外) |
[7a ] |
匹配[ ]中列举的字符,这里就是匹配7或者a这两个字符其中的一个 |
\d |
匹配数字,即0-9 |
\D |
匹配非数字,即不是数字 |
\s |
匹配空白,即 空格,tab键 |
\S |
匹配非空白 |
\w |
匹配单词字符,即a-z、A-Z、0-9、_ |
\W |
匹配非单词字符 |
2、表示数量
如果要匹配某个字符多次,就可以在字符后面加上数量进行表示,具体规则如下:
字符 |
功能 |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
+ |
匹配前一个字符出现1次或者无限次,即至少有1次 |
? |
匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} |
匹配前一个字符出现m次 |
{m,} |
匹配前一个字符至少出现m次 |
{m,n} |
匹配前一个字符出现从m到n次 |
3、表示边界
用来表示字符串或者单词的边界 如字符串开头,单词开头等
字符 |
功能 |
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
\b |
匹配单词的边界 |
\B |
匹配非单词边界 |
4、匹配分组
对匹配的内容做分组处理
字符 |
功能 |
(aaa) |
将括号中字符作为一个分组 |
\number |
引用分组number匹配到的字符串 |
(?P<g1>) |
分组起别名为g1 |
(?P=g1) |
引用别名为g1分组匹配到的字符串 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!