当前位置: 首页 > news >正文

Python正则表达式详解,保姆式教学,0基础也能掌握正则

正则作为处理字符串的一个实用工具,在Python中经常会用到,比如爬虫爬取数据时常用正则来检索字符串等等。正则表达式已经内嵌在Python中,通过导入re模块就可以使用,作为刚学Python的新手大多数都听说”正则“这个术语。

今天来给大家分享一份关于比较详细的Python正则表达式宝典,学会之后你将对正则表达式达到精通的状态。

在这里插入图片描述

文章目录

    • 一、re模块
    • 二、正则表达式
      • (一)字符串的匹配
        • 1.普通字符
        • 2.元字符
    • (二)正则的使用
        • 1.编译正则
        • 2.正则对象的使用方法
        • 3.Match object 的操作方法
        • 4.re模块的函数
    • 三、结语


一、re模块

在讲正则表达式之前,我们首先得知道哪里用得到正则表达式。正则表达式是用在findall()方法当中,大多数的字符串检索都可以通过findall()来完成。

1.导入re模块
在使用正则表达式之前,需要导入re模块。

import re	

2.findall()的语法:

导入了re模块之后就可以使用findall()方法了,那么我们必须要清楚findall()的语法是怎么规定的。

findall(正则表达式,目标字符串)

不难看出findall()的是由正则表达式和目标字符串组成,目标字符串就是你要检索的东西,那么如何检索则是通过正则表达式来进行操作,也就是我们今天的重点。

使用findall()之后返回的结果是一个列表,列表中是符合正则要求的字符串


二、正则表达式

(一)字符串的匹配

1.普通字符

大多数的字母和字符都可以进行自身匹配。

import re
a = "abc123+-*"
b = re.findall('abc',a)
print(b)

输出结果:

['abc']

2.元字符

元字符指的是. ^ $ ? + {} \ []之类的特殊字符,通过它们我们可以对目标字符串进行个性化检索,返回我们要的结果。

这里我给大家介绍10个常用的元字符以及它们的用法,这里我先给大家做1个简单的汇总,便于记忆,下面会挨个讲解每一个元字符的使用。

在这里插入图片描述

(1) []

[] 的使用方式主要有以下三种:

  • 常用来指定一个字符集。
s = "a123456b"
rule = "a[0-9][1-6][1-6][1-6][1-6][1-6]b"	#这里暂时先用这种麻烦点的方法,后面有更容易的,不用敲这么多[1-6]
l = re.findall(rule,s)
print(l)

输出结果为:

['a123456b']
  • 可以表示一个范围。

例如要在字符串"abcabcaccaac"中选出abc元素:

s = "abcabcaccaac"
rule = "a[a,b,c]c"  # rule = "a[a-z0-9][a-z0-9][a-z0-9][a-z0-9]c"	
l = re.findall(rule, s)
print(l)

输出结果为:

['abc', 'abc', 'acc', 'aac']
  • [] 内的元字符不起作用,只表示普通字符。

例如要在字符串“caabcabcaabc”中选出“caa”:

print(re.findall("caa[a,^]", "caa^bcabcaabc"))

输出结果为:

['caa^']

注意点:当在[]的第一个位置时,表示除了a以外的都进行匹配,例如把[]中的和a换一下位置:

print(re.findall("caa[^,a]", "caa^bcabcaabc")) 

输出:

['caa^', 'caab'] 

(2)^

^ 通常用来匹配行首,例如:

print(re.findall("^abca", "abcabcabc"))

输出结果:

['abca']

请添加图片描述

(3) $
$ 通常用来匹配行尾,例如:

print(re.findall("abc$", "accabcabc"))

输出结果:

['abc']

在这里插入图片描述

(4)\

​ 反斜杠后面可以加不同的字符表示不同的特殊含义,常见的有以下3种。

  • \d:匹配任何十进制数等价于[0-9]
print(re.findall("c\d\d\da", "abc123abc"))

输出结果为:

['c123a']

\可以转义成普通字符,例如:

print(re.findall("\^abc", "^abc^abc"))

输出结果:

['^abc', '^abc']
  • s

匹配任何的空白字符例如:

print(re.findall("\s\s", "a     c"))

输出结果:

['  ', '  ']
  • \w

匹配任何字母数字和下划线,等价于[a-zA-Z0-9_],例如:

print(re.findall("\w\w\w", "abc12_"))

输出:

['abc', '12_']

在这里插入图片描述

(5){n}

{n}可以避免重复写,比如前面我们用\w时写了3次\w,而这里我们这需要用用上{n}就可以,n表示匹配的次数,例如:

print(re.findall("\w{2}", "abc12_"))

输出结果:

['ab', 'c1', '2_']

(6)*

*表示匹配零次或多次(尽可能的多去匹配),例如:

print(re.findall("010-\d*", "010-123456789"))

输出:

['010-123456789']

**(7) + **

+表示匹配一次或多次,例如

print(re.findall("010-\d+", "010-123456789"))

输出:

['010-123456789']

(8) .

.是个点,这里不是很明显,它用来操作除了换行符以外的任何字符,例如:

print(re.findall(".", "010\n?!"))

输出:

['0', '1', '0', '?', '!']

(9) ?

?表示匹配一次或零次

print(re.findall("010-\d?", "010-123456789"))

输出:

['010-1']

这里要注意一下贪婪模式和非贪婪模式。

贪婪模式:尽可能多的去匹配数据,表现为\d后面加某个元字符,例如\d*:

print(re.findall("010-\d*", "010-123456789"))

输出:

['010-123456789']

非贪婪模式:尽可能少的去匹配数据,表现为\d后面加?,例如\d?

print(re.findall("010-\d*?", "010-123456789"))

输出为:

['010-']

(10){m,n}
m,n指的是十进制数,表示最少重复m次,最多重复n次,例如:

print(re.findall("010-\d{3,5}", "010-123456789"))

输出:

['010-12345']

加上?表示尽可能少的去匹配

print(re.findall("010-\d{3,5}?", "010-123456789"))

输出:

['010-123']

{m,n}还有其他的一些灵活的写法,比如:

  • {1,} 相当于前面提过的 + 的效果
  • {0,1} 相当于前面提过的 ? 的效果
  • {0,} 相当于前面提过的 * 的效果

在这里插入图片描述

关于常用的元字符以及使用方法就先到这里,我们再来看看正则的其他知识。


(二)正则的使用

1.编译正则

在Python中,re模块可通过compile() 方法来编译正则,re.compile(正则表达式),例如:

 s = "010-123456789"rule = "010-\d*"rule_compile = re.compile(rule) #返回一个对象# print(rule_compile)s_compile = rule_compile.findall(s)print(s_compile)	#打印compile()返回的对象是什么

输出结果:

['010-123456789']

2.正则对象的使用方法

正则对象的使用方法不仅仅是通过我们前面所介绍的 findall() 来使用,还可以通过其他的方法进行使用,效果是不一样的,这里我做个简单的总结:

(1)findall()
找到re匹配的所有字符串,返回一个列表

(2)search()
扫描字符串,找到这个re匹配的位置(仅仅是第一个查到的)

(3)match()
决定re是否在字符串刚开始的位置(匹配行首)

就拿上面的 compile()编译正则之后返回的对象来做举例,我们这里不用 findall() ,用 match() 来看一下结果如何:

s = "010-123456789"
rule = "010-\d*"
rule_compile = re.compile(rule)  # 返回一个对象
# print(rule_compile)
s_compile = rule_compile.match(s)
print(s_compile)  # 打印compile()返回的对象是什么

输出:

<re.Match object; span=(0, 13), match='010-123456789'>

可以看出结果是1个match 对象,开始下标位置为0~13,match为 010-123456789 。既然返回的是对象,那么接下来我们来讲讲这个match 对象的一些操作方法。

在这里插入图片描述


3.Match object 的操作方法

这里先介绍一下方法,后面我再举例,Match对象常见的使用方法有以下几个:

(1)group()
返回re匹配的字符串

(2)start()
返回匹配开始的位置

(3)end()
返回匹配结束的位置

(4)span()
返回一个元组:(开始,结束)的位置

举例:用span()来对search()返回的对象进行操作:

s = "010-123456789"
rule = "010-\d*"
rule_compile = re.compile(rule)  # 返回一个对象
s_compile = rule_compile.match(s)
print(s_compile.span())  #用span()处理返回的对象

结果为:

(0, 13)

4.re模块的函数

re模块中除了上面介绍的findall()函数之外,还有其他的函数,来做一个介绍:

(1)findall()
根据正则表达式返回匹配到的所有字符串,这个我就不多说了,前面都是在介绍它。

(2)sub(正则,新字符串,原字符串)
sub() 函数的功能是替换字符串,例如:

s = "abcabcacc" #原字符串
l = re.sub("abc","ddd",s)   #通过sub()处理过的字符串
print(l)

输出:

ddddddacc	#把abc全部替换成ddd

(3)subn(正则,新字符串,原字符串)
subn()的作用是替换字符串,并返回替换的次数

s = "abcabcacc" #原字符串
l = re.subn("abc","ddd",s)   #通过sub()处理过的字符串
print(l)

输出:

('ddddddacc', 2)

(4)split()
split()分割字符串,例如:

s = "abcabcacc"
l = re.split("b",s)
print(l)

输出结果:

['a', 'ca', 'cacc']

在这里插入图片描述


三、结语

关于正则,我就讲这么多了,正则几乎是Python所有方向中是必不可少的一个基础,祝你的Python之旅学有所成!

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你,干货内容包括:

在这里插入图片描述

点击文末的名片可以抱走
在这里插入图片描述

相关文章:

Python正则表达式详解,保姆式教学,0基础也能掌握正则

正则作为处理字符串的一个实用工具&#xff0c;在Python中经常会用到&#xff0c;比如爬虫爬取数据时常用正则来检索字符串等等。正则表达式已经内嵌在Python中&#xff0c;通过导入re模块就可以使用&#xff0c;作为刚学Python的新手大多数都听说”正则“这个术语。 今天来给…...

ChatGPT 接入飞书教程,创建自己的聊天机器人

ChatGPT 接入飞书教程,创建自己的聊天机器人 一、飞书进入开发者平台。点击创建应用。二、打开Aircode,点击创建应用,上面输入名字,下面选择Node.js v16三、配置环境,点击Environments,创建四个变量,全部要大写本教程收集于: AIGC从入门到精通教程 首先,准备三个账号…...

JS生成随机数(多种解决方案)

JS生成随机数 概述 随机数是编程语言中的重要组成部分。在JavaScript中&#xff0c;生成随机数是一项简单的任务。本文将介绍生成随机数的各种方法。 Math.random() Math.random()是JavaScript中生成随机数最常见的方法。该方法返回介于0和1之间的随机数。例如&#xff0c;…...

文件IO 函数 静态库和动态库的创建 5.11

5.11 文件IO函数 1.数据读写 ssize_t read(int fd,void *buf,size_t count); 功能&#xff1a; ​ 从fd对应的文件中 读取前count个字节的数据到buf缓冲区中 头文件&#xff1a; ​ #include <unistd.h> 参数&#xff1a; ​ fd &#xff1a;文件描述符 ​ buf…...

考研日语-详解ている、てある、ていく、てくる用法

目录 一、ている用法 1. 表示现在状态 2. 表示持续动作 3. 表示经验或习惯 4. 表示结果或效果 二、てある用法 1. 表示已经完成的动作 2. 表示现在状态 3. 表示被动 三、ていく用法 1. 表示未来的动作 2. 表示逐渐变化的过程 四、てくる用法 1. 表示过去到现在的…...

Spring Security 6.x 系列【36】授权服务器篇之OpenID Connect 1.0

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 本系列Spring Authorization Server 版本 1.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. OpenID Connect…...

【计算机视觉 | Pytorch】timm 包的具体介绍和图像分类案例(含源代码)

一、具体介绍 timm 是一个 PyTorch 原生实现的计算机视觉模型库。它提供了预训练模型和各种网络组件&#xff0c;可以用于各种计算机视觉任务&#xff0c;例如图像分类、物体检测、语义分割等等。 timm 的特点如下&#xff1a; PyTorch 原生实现&#xff1a;timm 的实现方式…...

轻博客Plume的搭建

什么是 Plume &#xff1f; Plume 是一个基于 ActivityPub 的联合博客引擎。它是用 Rust 编写的&#xff0c;带有 Rocket 框架&#xff0c;以及 Diesel 与数据库交互。前端使用 Ructe模板、WASM 和SCSS。 反向代理 假设我们实际访问地址为&#xff1a; https://plume.laosu.ml…...

机器人关节电机PWM

脉冲宽度调制(Pulse width modulation,PWM)技术。一种模拟控制方式 机器人关节电机的控制通常使用PWM(脉冲宽度调制)技术。PWM是一种用于控制电子设备的技术,通过控制高电平和低电平之间的时间比例,实现对电子设备的控制。在机器人关节电机中,PWM信号可以控制电机的…...

MPU6050详解(含源码)

前言&#xff1a;MPU6050是一款强大的六轴传感器&#xff0c;需要理解MPU6050首先得有IIC的基础&#xff0c;MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器&#xff0c;并且含有一个第二 IIC 接口&#xff0c;可用于连接外部磁力传感器&#xff0c;内部有硬件算法支持. 1…...

Vue入门学习笔记:TodoList(三):实例中的数据、事件和方法

目录&#xff1a; Vue入门学习笔记&#xff1a;TodoList&#xff08;一&#xff09;&#xff1a;HelloWorld Vue入门学习笔记&#xff1a;TodoList&#xff08;二&#xff09;&#xff1a;挂载点、模板、实例 Vue入门学习笔记&#xff1a;TodoList&#xff08;三&#xff09;&a…...

怎么找到引发回流的JavaScript代码?

要找到引发回流的JavaScript代码&#xff0c;可以使用浏览器的开发者工具中的性能分析器。不同的浏览器有不同的名称和位置&#xff0c;例如Google Chrome的开发者工具中的性能分析器被称为Performance&#xff0c;Firefox的开发者工具中的性能分析器被称为Profiler。 以下是在…...

未来广告策划,转型还是淘汰?

在广告行业呆了十来年了&#xff0c;最近我越来越感觉到广告行业真的是一个需要与时俱进&#xff0c;并且应用场景非常广泛的一个专业。 而且由于这是一个需要创意能力的行业&#xff0c;所以对比于重复性容易被机器以及人工智能所代替的岗位行业来说&#xff0c;广告的可替代…...

【vscode远程开发】使用SSH远程连接服务器 「内网穿透」

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…...

七天从零实现Web框架Gee - 扩展

到这里前七天的任务已经完成&#xff0c;但我们可以对Gee框架进行一些扩展 补充HTTP请求方法 原作者只实现了 GET, POST 路由添加&#xff0c;其他的 PUT, DELETE 等标准 HTTP 方法未实现&#xff0c;实现方法也很简单&#xff0c;只需在gee.go中增加如下代码 // PUT define…...

什么是土壤水分传感器

土壤水分传感器又称土壤湿度传感器由不锈钢探针和防水探头构成&#xff0c;可长期埋设于土壤和堤坝内使用&#xff0c;对表层和深层土壤进行墒情的定点监测和在线测量。与数据采集器配合使用&#xff0c;可作为水分定点监测或移动测量的工具&#xff08;即农田墒情检测仪&#…...

月薪17k需要什么水平?98年测试员的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…...

知了汇智:坚持发展产教融合,做好高校、人才与企业之间的桥梁

6月将正式迎来高校毕业季&#xff0c;大学生就业是聚焦全社会关注的头等大事。5月9日&#xff0c;成都知了汇智科技有限公司&#xff08;以下简称“知了汇智”&#xff09;组织开展“深化产教融合、聚焦人才培养”的主题座谈会议&#xff0c;联动高校与合作企业参加&#xff0c…...

MyBatis缓存-一级缓存--二级缓存的非常详细的介绍

目录 MyBatis-缓存-提高检索效率的利器 缓存-官方文档 一级缓存 基本说明 一级缓存原理图 代码演示 修改MonsterMapperTest.java, 增加测试方法 结果 debug 一级缓存执行流程 一级缓存失效分析 关闭sqlSession会话后 , 一级缓存失效 如果执行sqlSession.clearCache(…...

macOS Ventura 13.4 RC2(22F63)发布

系统介绍 根据黑果魏叔官网提供&#xff1a;5 月 12 日消息&#xff0c;苹果今天面向开发人员&#xff0c;发布了 macOS Ventura 13.4 的第 2 个候选 RC 版本&#xff08;内部版本号 22F63&#xff09;&#xff0c;距离上个候选版本相隔数天时间。 macOS Ventura 带来了台前调…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...