2023.12.28 Python高级-正则表达式
目录
re正则表达式,一种专门用来匹配目标字符串的规则
re.match(),从头匹配一个,无则none
re.search(), 不从头匹配返回一个,无则none
re.findall(), 不从头匹配,用list返回所有
re分组
re匹配修饰符
re贪婪非贪婪
re切割和替换
re正则表达式,一种专门用来匹配目标字符串的规则
正则语法 | 描述 |
---|---|
. | 匹配任意1个字符,除了 \n |
\d | 匹配1位数字,即0-9 |
\D | 匹配1位非数字 |
\s | 匹配1位空白符:空格、Tab |
\S | 匹配1位非空白符 |
\w | 匹配1位非特殊字符:即a-z、A-Z、0-9、_、汉字 |
\W | 匹配1位特殊字符 |
[列举字符] | 匹配1个[ ]中列举的字符:[a-z]表示匹配1个小写英文字符 |
* | 匹配出现0次或任意次的一个字符:\d* 表示 0个或任意个连续的数字 |
+ | 匹配出现1次或任意次的一个字符:\d+ 表示 1个或任意个连续的数字 |
? | 匹配出现1次或0次的一个字符:\d+? 表示 1个数字 |
{m} | 匹配出现m次的字符:\d{3} 表示 连续3个数字 |
{m,n} | 匹配出现从m到n次的字符:\d{2,5} 表示连续2到5个数字 |
^ | 匹配字符串开头:^a 表示以a开头的 |
$ | 匹配字符串结尾 :b$ 表示以b结尾 |
[^指定字符] | 匹配除了指定字符以外的所有字符 [^\d]+ 表示除了数字以外的字符 |
| | 匹配左右任意一个正则表达式 \d+|\W+ 表示数字或特殊字符 |
re.match(),从头匹配一个,无则none
"""
match函数:尝试从字符串起始位置根据正则表达式匹配一个结果
re.match(pattern正则表达式, string目标字符串)
1.如果不能从起始位置匹配成功,则返回None;
2.如果能从起始位置匹配成功,则返回一个匹配的对象
"""
import re
my_str = 'abc_123_DFG_456_abc'
# 匹配字符串bc(注:从头开始)
res = re.match('bc', my_str)
print(res) # None# 匹配字符串abc(注:从头开始)
res = re.match('abc', my_str)
print(res) # 匹配成功,返回一个 Match 对象
# Match对象.group():获取匹配的内容
print(res.group())
print('-----------')
re.search(), 不从头匹配返回一个,无则none
"""search函数:根据正则表达式扫描整个字符串,并返回第一个成功的匹配
re.search(pattern, string, flags=0)
1. 如果不能匹配成功,则返回None;
2. 如果能匹配成功,则返回一个匹配对象
"""
import re
my_str = 'abc_123_DFG_456_abc'# 匹配连续的3位数字 # \d{3}
res = re.search(r'\d{3}', my_str)
print(res.group())
res = re.search(r'bc', my_str)
print(res.group())
re.findall(), 不从头匹配,用list返回所有
"""findall函数:根据正则表达式扫描整个字符串,并返回所有能成功匹配的子串
re.findall(pattern, string, flags=0)
1. 如果不能匹配成功,则返回一个空列表;
2. 如果能匹配成功,则返回包含所有匹配子串的列表
"""
import re
my_str = 'abc_123_DFG_456_abc'# 匹配字符串中的所有连续的3位数字
res = re.findall(r'\d{3}', my_str)
print(res)
re分组
import re
"""
示例1:正则匹配分组操作
语法:(正则表达式)
"""
# 匹配手机号前3、中4、后4位数据
my_str = '13155667788'
# 131 5566 7788
# \d{3}\d{4}\d{4}
# (\d{3})(\d{4})(\d{4})res = re.match(r'(\d{3})(\d{4})(\d{4})', my_str)
print(res)
print(res.group()) # 完整的匹配结果# Match对象.group(组序号)
print(res.group(1)) # '131'
print(res.group(2)) # '5566'
print(res.group(3)) # '7788'
print('--------------')"""
示例2:给正则分组起别名
语法:(?P<分组别名>正则表达式)
"""# 需求:使用正则提取出 my_str 字符串中的 `传智播客` 文本
my_str = '<div><a href="https://www.itcast.cn" target="_blank">传智播客</a><p>Python</p></div>'res = re.search('<a.*>(?P<text>.*)</a>', my_str)
print(res)
print(res.group()) # 完整匹配结果
print(res.group(1)) # 根据组序号取匹配的数据
print(res.group('text')) # 根据组别名取匹配的数据"""
示例3:引用正则分组
语法:(?P<分组别名>正则表达式).*(?P=分组别名)
"""
import re
# 需求: 找到字符串里反复出现3次的连续的数字my_str = 'a123jkfjkfjg123' # ==> None
my_str = '123aq123a123' # ==> 123
my_str = '123123123' # ==> 123
my_str = '123 123123' # ==> 123
res = re.match(r'(?P<num>\d+)\D*(?P=num)\D*(?P=num)$', my_str)if res:print('匹配成功')print(res.group(1))print(res.group('num'))
else:print('匹配失败')
re匹配修饰符
import re
"""
re.I:匹配时不区分大小写
re.M:多行匹配,影响 ^ 和 $
re.S:影响 . 符号,设置之后,.符号就能匹配\n了
"""# re.I:匹配时不区分字母的大小写
my_str = 'aB'
res = re.match('ab', my_str, flags=re.I)
print(res.group())
print('----------------')# re.M:开启多行匹配模式,把每一行字符串,当作一个独立的字符串进行匹配
my_str = 'aabb\nbbcc'
res = re.findall('^[a-z]{4}$', my_str, flags=re.M)
print(res)
res = re.findall('^[a-z]{4}$', my_str)
print(res)
res = re.findall('[a-z]{4}', '11aabb')
print(res)
res = re.findall('^[a-z]{4}$', '11aabb')
# 被匹配的字符串必须以字母开头以字母结尾
print(res)
print('----------------')# re.S:让 . 也能匹配\n
my_str = '\nabc'
res = re.match('.', my_str, flags=re.S)
print(res)# 多模式:flags=re.S|re.M|re.I
my_str = '1111\nabc'
res = re.findall('.', my_str, flags=re.S|re.M|re.I)
print(res)
re贪婪非贪婪
import re
"""
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配
非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配
正则中的量词包括:{m,n}、?、*和+,这些量词默认都是贪婪模式的匹配
可以在这些量词后面加?将其变为非贪婪模式。
"""
my_str = '<div>test1</div><div>test2</div>'
# 贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配
re_obj = re.match('<div>.*</div>', my_str)
print(re_obj.group()) # 获取整个正则表达式匹配的内容
print('----')
# 非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配
re_obj = re.match('<div>.*?</div>', my_str)
print(re_obj.group()) # 获取整个正则表达式匹配的内容# \d{2,5}? == \d{2} != \d{2,5}
my_str = '221324324324242'
re_obj = re.match('\d{2,5}?', my_str)
print(re_obj.group())
re_obj = re.match('\d{2,5}', my_str)
print(re_obj.group())
re_obj = re.match('\d{2}', my_str)
print(re_obj.group())
re切割和替换
import re
# re.split(pattern, string, maxsplit, flags)
# 作用:对字符串进行分割
# 过程:先使用正则对字符串进行匹配,正则匹配到的内容作为分割符,对字符串进行分割
str1 = 'hello-python_hive'
res1 = re.split('[-_]', str1)
print(res1) # ['hello', 'python', 'hive']# re.sub(pattern, repl, string, count, flags)
# 作用:对字符串中的内容进行替换
# 过程:先使用正则对字符串进行匹配,然后将匹配到的内容进行替换,返回替换之后的新字符串
str2 = 'hello-python_hive' # 'hello:python:hive'
res2 = re.sub('[-_]', ':', str2)
print(res2) # hello:python:hive
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
2023.12.28 Python高级-正则表达式
目录 re正则表达式,一种专门用来匹配目标字符串的规则 re.match(),从头匹配一个,无则none re.search(), 不从头匹配返回一个,无则none re.findall(), 不从头匹配,用list返回所有 re分组 re匹配修饰符 re贪婪非贪婪 re切割和替换 re正则表达式,一种专门用来匹配目标字符串…...
![](https://www.ngui.cc/images/no-images.jpg)
编程笔记 html5cssjs 014 网页布局框架
编程笔记 html5&css&js 014 网页布局框架 一、Bootstrap简介二、使用Bootstrap布局 网页布局不只用HTML,还要用CSS和JAVASCRIPT等技术完成,这里暂时简单了解一下Bootstrap。 一、Bootstrap简介 这是一个开源的前端框架,由Twitter的前端工程师Ma…...
![](https://img-blog.csdnimg.cn/direct/30f154a8c32b4a95a1c9668eadc81aee.png)
抖店和商品橱窗有什么区别?新手应该选哪个?
我是电商珠珠 临近年底了,有的人已经开始为下一年筹谋,有的去抖音做账号做直播带货,不会直播带货的就想尝试做下抖店,来为以后的经济打基础。 刚想要接触却对这类有些迷糊,发现商品橱窗和抖店都可以卖货,…...
![](https://img-blog.csdnimg.cn/direct/42adb97824704bf3a9bad2a77d99c3dd.png)
在Adobe Acrobat上如何做PDF文档签名
Adobe Acrobat如何做PDF文档签名?PDF文档签名是指对PDF文档进行基于证书的数字签名,类似于传统的手写签名,可标识签名文档的人员。与手写签名不同,数字签名难以伪造,因为其包含签名者唯一的加密信息。为PDF文档进行基于…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode 988. Smallest String Starting From Leaf (二叉树遍历好题)
Smallest String Starting From Leaf Medium 1.6K 227 Companies You are given the root of a binary tree where each node has a value in the range [0, 25] representing the letters ‘a’ to ‘z’. Return the lexicographically smallest string that starts at a le…...
![](https://img-blog.csdnimg.cn/direct/5b217001027149119c884e5d70257441.png)
redis 三主六从高可用docker(不固定ip)
redis集群(cluster)笔记 redis 三主三从高可用集群docker swarm redis 三主六从高可用docker(不固定ip) 此博客解决,redis加入集群后,是用于停掉后重启,将nodes.conf中的旧的Ip替换为新的IP,从而达到不会因为IP变化导致集群无法…...
![](https://img-blog.csdnimg.cn/direct/9a9feefb88884a7e89228d48c09945a3.gif)
12.26
key_it.c #include"key_it.h" void led_init() {// 设置GPIOE/GPIOF时钟使能RCC->MP_AHB4ENSETR | (0x3 << 4);// 设置PE10/PE8/PF10为输出模式GPIOE->MODER & (~(0x3 << 20));GPIOE->MODER | (0x1 << 20);GPIOE->MODER & (~…...
![](https://img-blog.csdnimg.cn/direct/c2e3f85e5eda474e9130a3bcb9385ee2.png)
2022年全国职业院校技能大赛高职组云计算正式赛卷第三场-公有云
2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 目录 2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 【任务 1】公有云服务搭建[10 分] 【任务 2】公有云服务运维[10 分] 【任务 3】公有云运维…...
![](https://www.ngui.cc/images/no-images.jpg)
Python | 机器学习之数据清洗
机器学习前的数据清洗(异常值检验,标准化处理,哑变量处理) Python | 机器学习之数据清洗 机器学习 - 基础概念 - scikit-learn - 数据预处理 数据的标准化(离差标准化、log函数转换、atan函数转换、z…...
![](https://www.ngui.cc/images/no-images.jpg)
力扣:509. 斐波那契数(动态规划,附带递归版本) 详细讲解动态规划的思路
题目: 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中…...
![](https://img-blog.csdnimg.cn/direct/ecb00ba0976a4e58a90a14037c342a65.gif#pic_center)
Python3,压箱底的代码片段,提升工作效率稳稳的。
压箱底代码存活 1、引言2、代码实例2.1 操作存储服务2.1.1 Redis操作2.1.2 MongoDB操作2.1.3 MySQL操作 2.2 异步操作2.3 多线程 3、总结 1、引言 小屌丝:鱼哥,这年底了,得不得分享一点压箱底的东西啊 小鱼:… 压箱底的东西&…...
![](https://img-blog.csdnimg.cn/direct/9e2f634c3d6a4b57acb2f5148ed2b391.png)
Flowable-升级为7.0.0.M2-第三节
目录 启动项目添加虚拟机参数启动成功 启动项目 添加虚拟机参数 java.base/java.langALL-UNNAMED --add-opens java.base/java.mathALL-UNNAMED --add-opens java.base/java.util.concurrentALL-UNNAMED --add-opens java.base/java.netALL-UNNAMED --add-opens java.base/ja…...
![](https://img-blog.csdnimg.cn/direct/2e8ee09747f9446788162581c435fd26.png)
JavaWeb——前端之AjaxVue
6. 前后端交互 6.1 Ajax(原生的) 概念: Asynchronous JavaScript And XML(异步的JavaScript和XML) 作用: 数据交互:通过Ajax可以给服务器发送请求,并获取服务器响应的数据异步交…...
![](https://img-blog.csdnimg.cn/img_convert/98160886f4dae306e478cd02a49ec0c2.jpeg)
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
如果您有 Android 设备,您可能会将个人和专业的重要文件保存在设备的 SD 卡上。这些文件包括照片、视频、文档和各种其他类型的文件。您绝对不想丢失这些文件,但当您的 SD 卡损坏时,数据丢失是不可避免的。 幸运的是,您不需要这样…...
![](https://img-blog.csdnimg.cn/direct/a2478c417b75402994243651d187a249.gif#pic_center)
uni-app/vue封装etc车牌照输入,获取键盘按键键值
先看下效果如下: 动态图如下 uniapp的keyup获取不到keyCode和compositionstart,compositionend,所以需要监听input节点的keyup事件, 思路以及代码如下: 1.将每一个字符用文本框输入,代码如下 <view …...
![](https://www.ngui.cc/images/no-images.jpg)
iostat获取IO延迟单位从ms调整us的方案
iostat命令统计的磁盘I/O延迟通常是以毫秒(ms)为单位,例如在输出中的await字段表示的是平均服务时间,包括等待时间和处理时间,这个值就是以毫秒为单位。 然而,要获取更精确到微秒级别(us&#x…...
![](https://img-blog.csdnimg.cn/direct/2961ffbd06e3471293421965f0935c64.png)
K8s 源码剖析及debug实战之 Kube-Scheduler(四):预选算法详解
文章目录 0. 引言1. 回顾2. podFitsOnNode 为什么执行两次预选3. 预选算法有哪些4. 参考 0. 引言 欢迎关注本专栏,本专栏主要从 K8s 源码出发,深入理解 K8s 一些组件底层的代码逻辑,同时借助 debug Minikube 来进一步了解 K8s 底层的代码运行…...
![](https://img-blog.csdnimg.cn/direct/a83af2ffd16c4634aa62c1bbdce276ca.png)
ES6之解构赋值详解
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
![](https://img-blog.csdnimg.cn/direct/bcde820b3037458c888c182818b77892.png)
UntiyShader(五)属性、内置文件和变量
目录 一、如何使用属性 例子 ShaderLab中的属性的类型和Cg中的变量的类型之间的匹配关系 二、Unity提供的内置文件和变量 内置的包含文件 内置的变量 一、如何使用属性 在一开始我们提到过,材质和UnityShader之间有着密切的练习,我们可以通过材质面…...
![](https://img-blog.csdnimg.cn/direct/2825300d827d4027844265901f58dd0a.png)
Pytorch简介
1.1 Pytorch的历史 PyTorch是一个由Facebook的人工智能研究团队开发的开源深度学习框架。在2016年发布后,PyTorch很快就因其易用性、灵活性和强大的功能而在科研社区中广受欢迎。下面我们将详细介绍PyTorch的发展历程。 在2016年,Facebook的AI研究团队…...
![](https://img-blog.csdnimg.cn/img_convert/d93264ffdbecc5b3d539ac54adf486a4.png)
亚马逊云科技Amazon Q,一款基于生成式人工智能的新型助手
近日,亚马逊云科技宣布推出Amazon Q,这是一款基于生成式人工智能(AI)的新型助手,专为辅助工作而设计,可以根据您的业务量身定制。通过连接到公司的信息存储库、代码、数据和企业系统,可以使用Am…...
![](https://img-blog.csdnimg.cn/direct/46e999a4a1e5477aaef77af6f0584dc1.png)
骑砍战团MOD开发(29)-module_scenes.py游戏场景
骑砍1战团mod开发-场景制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Cw411N7G4/ 一.骑砍游戏场景 骑砍战团中进入城堡,乡村,战斗地图都被定义为场景,由module_scenes.py进行管理。 scene(游戏场景) 天空盒(Skyboxes.py) 地形(terrain code) 场景物(scene_…...
![](https://img-blog.csdnimg.cn/direct/b4193ebe6ba5412093057ec481085dd4.png)
ROS学习记录:ROS系统中的激光雷达消息包的数据格式
一、在工作空间中输入source ./devel/setup.bash 二、输入roslaunch wpr_simulation wpb_simple.launch打开机器人仿真环境 三、机器人仿真环境打开成功 四、给机器人围上一圈障碍物 五、再打开一个工作空间终端 六、输入roslaunch wpr_simulation wpb_rviz.launch打开RViz 七、…...
![](https://img-blog.csdnimg.cn/direct/65b3cc044edb46f8bc20cfa37d80de8e.png)
Vue.js和Node.js的关系--类比Java系列
首先我们看一张图 这里我们类比了Java的jvm和JavaScript的node.js。 可以看到,node.js是基础,提供了基础的编译执行的能力。vue,js是实际上定义了一种他自己的代码格式,以加速开发。...
![](https://www.ngui.cc/images/no-images.jpg)
我的笔记本电脑死机问题折腾记录
两年前,买了一台笔记本电脑。直到今年4月份,不到两年的时间,便出现了花屏的情况,然后就到官方售后去维修,换屏。然后在6月份,屏幕问题再次出现,又去售后维修。 经过两次维修,笔记本…...
![](https://img-blog.csdnimg.cn/direct/f5e8c08c8be64e71bc75bd884a467309.gif)
uniApp中uView组件库的丰富布局方法
目录 基本使用 #分栏间隔 #混合布局 #分栏偏移 #对齐方式 API #Row Props #Col Props #Row Events #Col Events UniApp的uView组件库是一个丰富的UI组件库,提供了各种常用的UI组件和布局方法,帮助开发者快速构建美观、灵活的界面。下面给你写一…...
![](https://img-blog.csdnimg.cn/direct/10e417675ea44375be22779cb57fe063.jpeg)
TDD-LTE 寻呼流程
目录 1. 寻呼成功流程 1.1 空闲态寻呼 1.2 连接态寻呼 2. 寻呼失败流程 2.1 Paging消息不可达 2.2 RRC建立失败 2.3 eNodeB未上发Initial UE message或达到超时 1. 寻呼成功流程 1.1 空闲态寻呼 寻呼成功:MME发起寻呼(S1 接口发送Paing 消息&…...
![](https://img-blog.csdnimg.cn/img_convert/79671d38ce2a43df531486e6f11a0b37.png)
TCP中的三次握手和四次挥手
TCP中的连接和断开可以说是在面试中经常被问到的问题之一,正好有空就总结一下,首先回顾一下TCP的相关知识点 1. TCP的基础知识 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。面向连接的,指的就是在两个进程发送数据…...
![](https://img-blog.csdnimg.cn/img_convert/bd94fd16bed01d3f17bb88fe4c6b20b7.png)
NAO.99b海潮模型的详解教程
NAO.99b模型是由日本国家天文台开发的全球潮汐模式,基于二维非线性浅水方程。该模型具有较高的分辨率,网格间距为0.50.5,网格数为720360,覆盖的经度范围为0.25~359.75E,纬度范围为89.75S~89.75N…...
![](https://img-blog.csdnimg.cn/direct/3aa720bc9edd41fcbdaf0daa19df23df.png)
Plantuml之JSON数据语法介绍(二十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
![](/images/no-images.jpg)
可以自己做直播网站吗/如何创建自己的卡网
内容来自网上查找和总结以及自己的尝试boot里面的启动项是根据其它文件生成的,如果改boot里面,会在你更新grub后再次回到原来的状态。(之后 我(有显卡驱动问题的用户)通过在开机时选择系统页面按e在倒数第二行ro quiet splash 后面加上acpi_osi! acpi_os…...
![](/images/no-images.jpg)
国外哪些做问卷的网站/云南网络推广
Object类是所有类的超类,也就是说,Java中的每一个类都是由Object扩展而来的。因而每当你创建一个对象,它都将拥有Object类中的全部方法。让我们先来看看java.lang.Object的中的主要方法有哪些: public class Object{//公共构造函…...
![](/images/no-images.jpg)
wordpress 描述/自动点击器下载
DataList是ASP.NET的数据控件之一,在使用时要对其进行数据绑定。但是使用过程中难免会出现需要根据已绑定表中的某列数据来作进一步的查询和显示,就需要使用DataList嵌套来解决此类问题。 举例: 1.要显示一张公司的组织结构表,要显…...
![](https://images2017.cnblogs.com/blog/1222745/201710/1222745-20171011211553824-2043393544.png)
网站开发备案/长沙好的seo外包公司
1、反射 为何要关注元数据?------反射服务 在.net中,通过反射可以得到一个给定的.dll或.exe程序集所包含的所有类型的列表,列表包括给定类型定义的方法、字段、属性和事件,反射即反向获得。 如何使用System.Reflection命名空间编程…...
![](/images/no-images.jpg)
潍坊网站建设wfyckj/自己怎样在百度上做推广
1.一个人总要走陌生的路,看陌生的风景,听陌生的歌,然后在某个不经意的瞬间,你会发现,原本是费尽心机想要忘记的事情真的就那么忘记了。1.One is always on a strange road, watching strange scenery and listeningto …...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
wordpress 推广返利/今日重大新闻头条
题目链接: http://codeforces.com/problemset/problem/831/A 题目描述: 让你判断数列是不是符合题目描述的规律增长 解题思路: 我知道我的思路是对的, 但是肯定是不好的, 因为BUG特别难找 代码: #include …...