测开不得不会的python之re模块正则表达式匹配
学习目录
正则表达式介绍
正则表达式的常用符号
python的re模块
findall()函数
finditer()函数
match()函数
search()函数
split()函数

正则表达式的介绍
Python 通过标准库中的 re 模块来支持正则表达式。
正则表达式作为高级的文本模式匹配、抽取、和搜索。简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,按照设定的匹配逻辑能够匹配一系列有相似特征的字符串。
举例:re模块的findall函数在大量的文本信息中找到“3位区号-7位数字”的固定电话号码。
sr = '足看025-2322222,呢023-32322,噢00哦30哦0290231312312' * 5
print(re.findall('\d{3}-\d{7}',sr))
打印结果如下:找到了5个号码
['025-2322222', '025-2322222', '025-2322222', '025-2322222', '025-2322222']
正则表达式的符号介绍
常用到到的表达式符号如下,将不同的符号组合为正则表达式
| 符号 | 解释 | 示例 |
| re1|re2 | 匹配正则表达式 re1 或者 re2 | foo|bar |
| . | 匹配任何字符(除了\n 之外) | b.b |
| ^ | 匹配字符串起始部分 | ^Dear |
| $ | 匹配字符串终止部分 | /bin/*sh$ |
| * | 匹配 0 次或者多次前面出现的正则表达式 | [A-Za-z0-9]* |
| + | 匹配 1 次或者多次前面出现的正则表达式 | [a-z]+\.com |
| ? | 匹配 0 次或者 1 次前面出现的正则表达式 | goo? |
| {N} | 匹配 N 次前面出现的正则表达式 | [0-9]{3} |
| {M,N} | 匹配 M~N 次前面出现的正则表达式 | [0-9]{5,9} |
| […] | 匹配来自字符集的任意单一字符 | [aeiou] |
| [..x−y..] | 匹配 x~y 范围中的任意单一字符 | [0-9], [A-Za-z] |
| [^…] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) | [^aeiou], [^A-Za-z0-9] |
| (*|+|?|{})? | 用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{}) | .*?[a-z] |
| (…) | 匹配封闭的正则表达式,然后另存为子组 | ([0-9]{3})?,f(oo| |
| \d | 匹配任何十进制数字,与[0-9]一致(\D 与\d 相反,不匹配任何非数值型的数字) | data\d+.txt |
| \w | 匹配任何字母数字字符,与[A-Za-z0-9_]相同(\W 与之相反) | [A-Za-z_]\w+ |
| \s | 匹配任何空格字符,与[\n\t\r\v\f]相同(\S 与之相反) | of\sthe |
| \b | 匹配任何单词边界(\B 与之相反) | \bThe\b |
| \N | 匹配已保存的子组 N(参见上面的(…)) | price: \16 |
| \c | 逐字匹配任何特殊字符 c(即,仅按照字面意义匹配,不匹配特殊含义) | \., \\, \* |
| \A(\Z) | 匹配字符串的起始(结束)(另见上面介绍的^和$) | \ADear |
举几个例子:
1 匹配以字母a开头,以字母b结束的中间为任意1个数字
表达式=’^a[0-9]b$’
sr2 = 'a2b'
sr3='acb'
print(re.findall('^a[0-9]b$',sr2))
print(re.findall('^a[0-9]b$',sr3))
#打印结果 字符串sr2符合要求
['a2b']
[]
2 匹配字母s或者字母c出现1到3次
表达式='[s|c]{1,3}'
sr4 = 'a2bsbccs233scacss'
print(re.findall('[s|c]{1,3}',sr4))
3 匹配字母c和f之前的任意字符
表达式=‘c.*f’
sr5='acdfdfb'
print(re.findall('c.*f',sr5))
打印结果:
['cdfdf']

re模块
安装完python后通过import re直接导入使用
re常用函数有match(),search(),findall(),finditer(),split()
findall()函数
findall()函数匹配正则表达式,匹配所有符合条件的数据,并返回一个列表,匹配不上返回为空列表,上面已经有举例,不在次多做介绍。
finditer()函数
finditer()函数与 findall()函数相同,但返回的不是一个列表,而是一个迭代器。对于每一次匹配,迭代器都返回一个match匹配对象
sr = '看025-2322222,设定023-32322,噢00哦30哦0290231312312'
#打印匹配的结果
print(re.finditer('\d{3}-\d{7}',sr))#打印list()函数将迭代器转换为列表并打印
print(list(re.finditer('\d{3}-\d{7}',sr)))#循环迭代器,将match对象通过group()函数打印匹配到内容
for i in re.finditer('\d{3}-\d{7}',sr):if i is not None:print(i.group())else: print('未匹配到对象')
#结果为迭代器
<callable_iterator object at 0x108daa380>
#每个list元素为match对象
[<re.Match object; span=(8, 19), match='025-2322222'>]
#打印match对象的内容
025-2322222
match()函数
match()尝试从字符串的起始部分对模式进行匹配。如果匹配成功,返回一个匹配对象;如果匹配失败,返回 None; 匹配对象的 group()方法用于显示成功的匹配。
sr6 = 'a2bsbccs233scacss'
#表达式‘a{1,3}’从起始位置可以匹配成功
print(re.match('a{1,3}',sr6))#表达式‘2b.*’从起始位置不能匹配成功
print(re.match('2b.*',sr6))打印结果: 第一个可以匹配,第二个为None
<re.Match object; span=(0, 1), match='a'>
None
通过group()方法获取匹配到的内容
print(re.match('a{1,3}',sr6).group())

search()函数
search()方法会在任意位置搜索正则表达式第一次出现的匹配情况(即使可以匹配到多个,也只会获取第一次匹配到的数据)。如果搜索到成功的匹配,会返回一个匹配对象;否则,返回 None。
比如上面的例子
sr6 = 'a2bsbccs233scacss'
print(re.search('233.*',sr6).group())
#打印结果
233scacss
虽然从字符串一开始匹配不到,但是通过搜索在中间位置可以找到匹配的对象,然后通过group()方法获取匹配到的内容。
在正则表达式中加入括号(),进行分组,获取分组内的内容。
比如下面表达式'233(.*)c(.*)',添加了两个分组,通过group(1)和group(2)获取相应内容
print(re.search('233(.*)c(.*)',sr6).group(1))
print(re.search('233(.*)c(.*)',sr6).group(2))
#打印结果
sca
ss
split()函数
split()函数在正则表达式匹配到内容后,将其他未匹配的内容分割为列表,可支持最大分割次数,类似与字符串str.split()方法。
sr7 = '1234a2344b555556d556677'
#将匹配到字母以为的其他内容分割为一个列表
print(re.split('[a-z]',sr7))
#打印结果
['1234', '2344', '555556', '556677']
参数添加maxsplit次数后
print(re.split('[a-z]',sr7,maxsplit=2))
#打印结果
['1234', '2344', '555556d556677']
----感谢读者的阅读和学习,谢谢大家。
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
相关文章:
测开不得不会的python之re模块正则表达式匹配
学习目录 正则表达式介绍 正则表达式的常用符号 python的re模块 findall()函数 finditer()函数 match()函数 search()函数 split()函数 正则表达式的介绍 Python 通过标准库中的 re 模块来支持正则表达式。 正则表达式作为高级的文本模式匹配、抽取、和搜索。简单地说…...
selenium4 元素定位
selenium4 9种元素定位 ID driver.find_element(By.ID,"kw")NAME driver.find_element(By.NAME,"tj_settingicon")CLASS_NAME driver.find_element(By.CLASS_NAME,"ipt_rec")TAG_NAME driver.find_element(By.TAG_NAME,"area")LINK_T…...
sql高级教程-索引
文章目录 架构简介1.连接层2.服务层3.引擎层4.存储层 索引优化背景目的劣势分类基本语法索引结构和适用场景 性能分析MySq| Query Optimizerexplain 索引优化单表优化两表优化三表优化 索引失效原因 架构简介 1.连接层 最上层是一些客户端和连接服务,包含本地sock通…...
拼团小程序制作技巧大揭秘:零基础也能轻松掌握
随着拼团模式的日益流行,越来越多的商家和消费者开始关注拼团小程序的制作。对于没有技术背景的普通人来说,制作一个拼团小程序似乎是一项艰巨的任务。但实际上,选择一个简单易用的第三方平台或工具,可以轻松完成拼团小程序的制作…...
报错:The supplied javaHome seems to be invalid. I cannot find the java executable
AS 升级遇到的问题 问题 升级 Android Studio,碰到无法检测到 java The supplied javaHome seems to be invalid. I cannot find the java executable. Tried location: D:\Program Files\Android\Android Studio\jre\bin\java.exe 然后去网上找解决思路。 终于…...
关于 硬盘
关于 硬盘 1. 机械硬盘1.1 基本概念1.2 工作原理1.3 寻址方式1.4 磁盘磁记录方式 2. 固态硬盘2.1 基本概念2.2 工作原理 1. 机械硬盘 1.1 基本概念 机械硬盘即是传统普通硬盘,硬盘的物理结构一般由磁头与盘片、电动机、主控芯片与排线等部件组成。 所有的数据都是…...
Java反射实体组装SQL
之前在LIS.Core定义了实体特性,在LIS.Model给实体类加了表特性,属性特性,外键特性等。ORM要实现增删改查和查带外键的父表信息就需要解析Model的特性和实体信息组装SQL来供数据库驱动实现增删改查功能。 实现实体得到SQL的工具类,…...
tensorrt安装使用教程
一般的深度学习项目,训练时为了加快速度,会使用多GPU分布式训练。但在部署推理时,为了降低成本,往往使用单个GPU机器甚至嵌入式平台(比如 NVIDIA Jetson)进行部署,部署端也要有与训练时相同的深…...
Java后端开发(十)-- idea(2022版)将 已push 的 远程仓库 的 多条commit记录 进行撤销
目录 1.多次 修改Test01类后,提交到本地仓库 。 2.多次重复 1 的步骤,多次commit成功后,在Git =》Log中会显示,commit记录...
常见面试题-Netty专栏(一)
typora-copy-images-to: imgs Netty 是什么呢?Netty 用于做什么呢? 答: Netty 是一个 NIO 客户服务端框架,可以快速开发网络应用程序,如协议服务端和客户端,极大简化了网络编程,如 TCP 和 UDP …...
【iOS】JSONModel的基本使用
文章目录 前言一、导入JSONModel二、JSONModel的基本使用1.基本用法2.模型集合3.模型导出为NSDictionary或JSON4.设置所有属性可选(所有属性值可以为空)5.下划线(蛇式)转驼峰命名法 前言 JSONModel 是一个用于 Objective-C 的开源库,它用于简…...
imu预积分学习(更新中)
imu预积分学习(更新中) IMU预积分可以做什么? 以上面那个经典图片为例子,IMU可以通过六轴数据,拿到第i帧和第j帧之间的相对位姿,这样不就可以去用来添加约束了吗 但是有一个比较大的问题是: I…...
算法刷题-链表
算法刷题-链表 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]…...
Linux 挂载磁盘到指定目录
问题:公司分配了数据磁盘,但是分区也没有挂载到目录 首先 df -h 查看一下挂载点的情况 查看服务器上未挂载的磁盘 fdisk -l 注:图中sda、sdb (a、b指的是硬盘的序号) 分区操作 我们可以看到b硬盘有536G未分区&…...
ZYNQ linux调试LCD7789
一,硬件管脚 1,参数解释和实物 LVGL是一个开源的图形库,主要用于MCU上屏幕UI的部署,功能完善,封装合理,可裁切性强,也可以实现Linux上fbx的部署。LVGL官网LVGL - Light and Versatile Embedded Graphics Library 每根线的作用...
【双向链表的插入和删除】
文章目录 双向链表双向链表的插入双向链表的删除操作 双向链表 双向链表的结构定义如下: //双向链表的结构定义 typedef struct DuLNode {ElemType data;struct DuLNode* prior, * next; }DuLNode,*DuLinkList;双向链表的结点有两个指针域:prior&#…...
【Android知识笔记】Webview专题
WebView 核心组件 类名作用常用方法WebView创建对象加载URL生命周期管理状态管理loadUrl():加载网页 goBack():后退WebSettings配置&管理 WebView缓存:setCacheMode() 与JS交互:setJavaScriptEnabled()WebViewClient处理各种通知&请求事件should...
Leetcode第 368 场周赛
元素和最小的山形三元组 II 预处理前缀和后缀最小值,记为pre[i]和sa[i] 对于当前编号i,如果前面的最小值和后面的最大值都小于nums[i],则记录ans[i] nums[i]pre[i-1]sa[i1] 结果输出最小的ans[i]即可。 合法分组的最少组数 统计每一个数字出现的次数。将每一个数…...
Mysql数据库 3.SQL语言 DML数据操纵语言 增删改
DML语句:用于完成对数据表中数据的插入、删除、修改操作 一.表数据插入 插入数据语法: 步骤例: 1.声明数据库:use 数据库名; 2.删除操作:drop table if exists 表名; 3.创建数据库中的表:create table 表…...
Java中,如何去掉字符串中前面所有的0
大家好,我是三叔,这期主要给大家分享下在开发中使用的字符串的一些常见方法。 例如:00000000110,现在需要去掉前面所有补的0,得到110,相信大家在开发中肯定有遇到过类似的开发需求,如何做&…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
