丘一丘正则表达式
正则表达式(regular expression,regex,RE)
- 正则表达式是一种用来简洁表达一组字符串的表达式
- 正则表达式是一种通用的字符串表达框架
- 正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具
- 正则表达式可以用来判断某字符串的特征归属
正则表达式常用操作符
| 操作符 | 说明 | 实例 |
|---|---|---|
| . | 表示任意单个字符 | py. 可以匹配pyc,pyy,py!等等 |
| [ ] | 字符集,对单个字符给出取值范围 | [abc]可以匹配a或b或c;[0-9a-zA-z\_]可以匹配一个数字、一个字母或者一个下划线 |
| [^ ] | 非字符集,对单个字符给出排除范围 | [^abc]可以匹配非a或非b或非c的单个字符 |
| * | 前一个字符0次或多次扩展 | abc* 可以匹配ab、abc、abcc、abccc等等 |
| + | 前一个字符的1次或多次扩展 | abc+可以匹配abc、abcc、abccc等等 |
| ? | 前一个字符0次或1次扩展 | abc?可以匹配ab、abc |
| | | 左右表达式任意一个 | abc|def表示abc、def |
| {m} | 扩展前一个字符m次 | ab{2}c匹配abbc |
| {m,n} | 扩展前一个字符m至n次数(含n) | ab{1,2}c可以匹配abc、abbc |
| ^ | 匹配字符串开头 | ^abc表示abc且在一个字符串的开头,^\d表示必须以数字开头 |
| $ | 匹配字符串结尾 | abc表示abc且在一个字符串的结尾、\d$白哦是必须以数字结尾 |
| ( ) | 分组标记,内部只能使用|操作符 | (abc|def)表示abc、def |
| \d | 可以匹配一个数字,相当于[0-9] | \d{3}表示匹配3个数字,如010 |
| \w | 可以匹配一个字母或者数字或者下划线,相当于[a-zA-Z0-9_] | \w\w\d可以匹配'py3' |
| \s | 可以匹配一个空格(也包括Tab等空白字符) | \s+表示至少有一个空格,如' '、' ' |
精确匹配
在正则表达式中,如果直接给出字符,就是精确匹配
- 'pyt' 匹配'pyt'
- '00\d' 可以匹配'007'
- '\w\d' 可以匹配'!5'
- 'ye.' 可以匹配'yes'
- '(P|p)python' 可以匹配'Python'、'python'
高阶精确匹配,经典实例
- ^[A-Za-z]+$ 匹配由26个英文字母组成的字符串,如'abrg'、'abgsfsfga'
- [a-zA-Z\_][0-9a-zA-Z\_]* 可以匹配由字母或者下划线开头、后接任意一个由字母、数字或者下划线组成的字符串,也就是python的合法变量
- ^-?\d+$ 匹配整数形式的字符串
- ^[0-9][1-9][0-9]$ 匹配正整数形式的字符串
- [1-9]\d{5} 中国境内邮政编码,6位
- [\u4e00-\u9fa5] 匹配中文字符
- \d{3}-\d{8}|\d{4}-\d{7} 国内电话号码,010-68913536
python正则表达式模块,(Re模块)
- re是python的标准库,主要用于字符串匹配
- re库采用raw string类型(原生字符串类型)表示正则表达式,例如
r'[1-9]\d{5}',raw string是不包含对转义符再次转义的字符串 - re库也可以采用string类型表示正则表达,但是较为繁琐,例如
'[1-9]\\d{5}'

re库功能函数
| 函数 | 说明 |
|---|---|
| re.search() | 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 |
| re.match() | 从一个字符串的开始位置起匹配正则表达式,返回match对象 |
| re.findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
| re.split() | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
| re.finditer | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
| re.sub() | 在字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
1. re.search(pattern,string,flags=0)
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
pattern:正则表达式的字符串或原生字符串表示string:待匹配字符串flags: 正则表达式使用时的控制标记

| 常用标记 | 说明 |
|---|---|
| re.I re.IGNORECASE | 忽略正则表达式的大小写,[A-Z]能够匹配小写字符 |
| re.M re.MULTILINE | 正则表达式中的^操作符能够将给定字符串的每行当做匹配开始 |
| re.s re.DOTALL | 正则表达式中的.操作符能够匹配所有字符串,默认匹配除换行外的所有字符串 |
2. re.match(pattern,string,flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象
pattern:正则表达式的字符串或者原生字符串表示string:待匹配字符串flags:正则表达式使用时的控制标记


3. re.findall(pattern,string,flags=0)
搜索字符串,以列表类型返回全部能匹配的字符串 
4. re.split(pattern,string,maxsplit=0,flags=0)
将一个字符串按照正则匹配结果进行分割,返回列表类型
maxsplt:最大分割数,剩余部分作为最后一个元素输出

5. re.finditer(pattern,string,flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代类型是match对象

6. re.sub(pattern,repl,string,cout=0,flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
repl:替换匹配字符串的字符串cout:匹配的最大替换次数

re库的面向对象用法
在python中使用正则表达式的时候,re模块内部会做两件事:
编译正则表达式,如果正则表达式本身不合法,会报错
用编译后的正则表达式去匹配字符串
regex = re.compile(pattern,flags=0) 将正则表达式的字符串形式编译成正则表达式对象
pattern:正则表达式的字符串或原生字符串表示flags:正则表达式使用时的控制标记
compile后生成了regular expression对象,由于该1对象包含了正则表达式,所以调用对应的方法不用给出正则字符串
re库的Match对象
- Match对象是一次匹配的结果,包含很多信息

Match对象的属性
| 属性 | 说明 |
|---|---|
| .string | 待匹配的文本 |
| .re | 匹配使用的pattern对象(正则表达式) |
| .pos | 正则表达式搜索文本的开始位置 |
| .endpos | 正则表达式搜索文本的结束位置 |

Match对象的方法
| 方法 | 说明 |
|---|---|
| .group(0) | 获得匹配后的字符串 |
| .start() | 匹配字符串在原始字符串的开始位置 |
| .end() | 匹配字符串在原始字符串的结束位置 |
| .span() | 返回(.start(),.end())一个元组 |


re库的贪婪匹配和最小匹配
re库默认使用贪婪匹配,即匹配最长的子串

最小匹配

** 最小匹配操作符 **
| 操作符 | 说明 |
|---|---|
| *? | 前一个字符0次或者无限次扩展,最小匹配 |
| +? | 前一个字符1次或者无限次扩展,最小匹配 |
| ?? | 前一个字符0次或1次扩展,最小匹配 |
| {m,n}? | 扩展前一个字符m至n次(包含n),最小匹配 |
只要输出长度可能不同的,都可以通过在操作符后面加?变成最小匹配
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
相关文章:
丘一丘正则表达式
正则表达式(regular expression,regex,RE) 正则表达式是一种用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具正则表达式可以用来判断某字符串的特征归属 正则表达式常用操作符 操作符说明实…...
工业物联网平台在水务环保、暖通制冷、电力能源等行业的应用
随着科技的不断发展,工业物联网平台作为连接物理世界与数字世界的桥梁,正逐渐成为推动各行业智能化转型的关键力量。在水务环保、暖通制冷、电力能源等行业,工业物联网平台的应用尤为广泛,对于提升运营效率、降低能耗、优化管理等…...
【研发日记】Matlab/Simulink技能解锁(二)——在Matlab Function编辑窗口Debug
文章目录 前言 行断点 条件断点 按行步进 Watch Value 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时,如果能确定大致的代码段,就可以在相应的行上设置一…...
从键盘输入两个数,求它们的和并输出 从键盘输入三个数到a,b,c中,按公式值输出
别急别急,先看完 (从初学者出发) 从键盘输入两个数,求它们的和并输出 作者 陈春晖 单位 浙江大学 本题目要求读入2个整数A和B,然后输出它们的和。 输入格式: 在一行中给出一个被加数 在另一行中给出一个加数 输出格式: 在…...
密码解密 C卷(100%用例)(JavaPythonC++Node.jsC语言)
给定一段“密文“字符串s,其中字符都是经过"密码本”映射的,现需要将"密文"解密并且输出 映射的规则(a-i)分别用(1-9)表示;(j-z")分别用(10-"26”)表示 约束:映射始终唯一 输入描述: “密文”字符串 输出描述: 明文字符串 补充说明: 翻译后的文本…...
因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)
H5项目打包之后,总是有这个报错,有时候还有别的icon也找不见 一通调查之后,发现是因为引入了一个vue插件 这个插件引入之后,webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…...
『 Linux 』进程替换( Process replacement ) 及 简单Shell的实现(万字)
文章目录 🦄 进程替换🦩 execl()函数🦩 execlp()函数🦩 execle()函数🦩 execv()函数🦩 execvp()函数🦩 execvpe()函数🦩 execve()函数 🦄 简单Shell命令行解释器的实现&a…...
【Linux】从零开始认识进程 — 前篇
我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。。——山本耀司 从零开始认识进程 1 认识冯诺依曼体系2 操作系统3 进程3.1 什么是进程???3.2 进程管理PCB 3.3 Linux中的进程深入理解 3.4 进程创建总结 送给…...
公众号留言功能恢复了,你的开通了吗?
了解公众号的人都知道,腾讯在2018年3月宣布暂停新注册公众号的留言功能,这之后注册的公众号都不具备留言功能。 这成了很多号主运营人的一块心病,也包括我。 没有留言,就好似一个人玩单机游戏,无法与读者互动ÿ…...
C语言葵花宝典之——文件操作
前言: 在之前的学习中,我们所写的C语言程序总是在运行结束之后,就会自动销毁,那如果我们想将一个结果进行长期存储应该如何操作呢?这时候就需要我们用文件来操作。 目录 1、什么是文件? 1.1 程序文件 1.2…...
SSM框架,MyBatis-Plus的学习(下)
条件构造器 使用MyBatis-Plus的条件构造器,可以构建灵活高效的查询条件,可以通过链式调用来组合多个条件。 条件构造器的继承结构 Wrapper : 条件构造抽象类,最顶端父类 AbstractWrapper : 用于查询条件封装…...
边缘计算网关的工作原理及其在工业领域的应用价值-天拓四方
随着物联网技术的快速发展,物联网时代已经悄然来临。在这个时代,数以亿计的设备相互连接,共享数据,共同构建智慧的世界。边缘计算网关通过将计算能力和数据存储推向网络的边缘,实现了对海量数据的实时处理,…...
下载指定版本的pytorch
下载网址:https://download.pytorch.org/whl/torch_stable.html 参考博客网址:https://blog.csdn.net/wusuoweiieq/article/details/132773977...
STL:List从0到1
🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…...
利用高分五号02星高光谱数据进行地物识别
高分五号02星搭载了一台60公里幅宽、330谱段、30米分辨率的可见短波红外高光谱相机(AHSI),可见近红外(400~1000nm)和短波红外光谱(1000~2500nm)分辨率分别达到5纳米和10纳米。单看参数性能优越&…...
前端如何识别上传的二维码---jsQR
npm npm i -d jsqrhtml <el-button click"$refs.input.click()">识别</el-button> <input type"file" style"display: none" id"input" input"upload">js import jsQR from "jsqr";decodeQR…...
flink1.18.0 自定义函数 接收row类型的参数
比如sql中某字段类型 array<row<f1 string,f2 string,f3 string,f4 bigint>> 现在需要编写 tableFunction 需要接受的参数如上 解决方案 用户定义函数|阿帕奇弗林克 --- User-defined Functions | Apache Flink...
JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)
本文主要介绍JDK8和JDK11在Ubuntu18上切换,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:计算机杂记 🎀CSDN主页 发狂的小花 🌄人…...
基于eleiment-plus的表格select控件
控件不是我写的,来源于scui,但在使用中遇到了一些问题,希望能把过程记录下来,同时把这个问题修复掉。 在使用的时候对控件进行二级封装,比如我的一个商品组件,再很多地方可以用到,于是 <template>&l…...
「❤️万文总结 时光回忆录❤️」那年,我在北京邮电大学计算机学院求学的日子
文章目录 关于我 | About Me梦绕西土城,邮情涌流 | Dreams and Connections in Haidian 北邮求学记 | My Days at BUPT岁月如歌,追忆往昔 | Reminiscing the Fleeting Years新篇章:班级与环境 | New Class, New Surroundings高压与挑战&#…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
