python 学习之 re库的基本使用(正则匹配)上

news2024/11/16 21:24:41

目录

一、基本用法

二、函数介绍

1、match函数

2、search 函数

3、compile 函数

4、findall 和 finditer 函数

5、sub 函数和 subn 函数

6、split 函数


一、基本用法

首先我们需要引入 re 库

代码基本框架使用两行代码实现

测试代码:

import re

ret = re.match('.', 'test123')
print(ret.group())

代码详解:

使用 import 导入 re库;

ret 为自定义的一个变量 (这里称为匹配对象)用于接受返回的匹配信息;

Python中点是调用的意思,调用 re 库下的 match() 函数;

后面我们介绍的函数基本上都有三个参数,我们通常设置前两个就行了,便于大家理解。

match() 函数中第一个参数为正则表达式模式,即我们按照什么样的规则去进行正则匹配,第二个参数为要进行匹配的目标字符串,两者都需要使用引号包裹;

最后使用 print() 函数输出结果,其中 ret 为匹配对象,group() 是匹配对象的一个方法,调用该方法返回匹配到的字符串。

运行结果:

二、函数介绍

我们先讲最基础的用法,后面再介绍一些常用的匹配规则。

1、match函数

用法及参数上面已经介绍

对于 match() 函数,它只会匹配字符串的开头,如果目标字符串的开头匹配正则表达式,re.match() 返回一个匹配对象,否则返回 None(此时如果调用 group() 输出就会报错)。

具体如下图:

尝试在开头匹配字母 a ,由于字符串开头是 t ,因此匹配失败

2、search 函数

扫描整个字符串并返回第一个成功的匹配,如果没有匹配成功,则返回 None。

测试代码:

import re

ret = re.search('a', 'tesat123')
print(ret.group())

运行结果:

虽然在开头并未匹配到 a ,但是整个字符串中存在 a ,所以也会成功匹配 

3、compile 函数

该函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,re.compile 返回一个正则表达式对象,对象具有 match、search、findall 等方法,用于提高匹配效率。

测试代码:

这里以 match 匹配成功为例

import re

r = re.compile('t')
ret = r.match("test123")
print(ret)
print(ret.group())

运行结果: 

4、findall 和 finditer 函数

re.findall 用于在字符串中找到正则表达式所匹配的所有子串,并返回一个列表;re.finditer 与 re.findall 类似,但返回一个迭代器,我们使用 for 循环读出。

测试代码:

其中 '[\d]' 表示匹配任意一个数字,即 [0-9] 都会匹配成功。

更保险规范的写法是在  '[\d]' 前面加上一个小 r ,即 r '[\d]'

主要是因为我们用到了转义符,加上 r 的话,反斜杠就不会被当做转义符,而是单纯的反斜杠符号

import re

ret = re.findall('[\d]','asd123zxc456qwe789')
print(ret)
ret2 = re.finditer('[\d]', 'asd123zxc456qwe789')
print(ret2)
for i in ret2:
    print(i.group())

运行结果:

5、sub 函数和 subn 函数

re.sub 函数用于将匹配到的数据进行替换,re.subn 函数与 re.sub 类似,但返回一个元组,包括替换后的字符串和替换次数。

这个函数就一定需要指定三个参数了,分别对应:(正则匹配规则, 要替换的内容, 被替换的内容)

测试代码:

我们匹配数字,将数字都替换为 'AA'

import re

ret = re.sub('[\d]', 'AA', 'asd123zxc456qwe789')
print(ret)
ret2 = re.subn('[\d]', 'AA', 'asd123zxc456qwe789')
print(ret2)

运行结果:

在 sunb 函数中,这里替换了 9 个数字,因此返回元组的第二个参数为 9 。

6、split 函数

re.split 函数根据匹配进行切割字符串,并返回一个列表。

split 函数也是有三个参数:('正则匹配规则', '字符串', '分割次数')

分割次数如果不指定,则默认为 0 ,匹配到多少次分割多少次。

测试代码:

这里匹配空格(匹配到空格的地方我们就分割一次)

import re
ret = re.split(r" ", "myon 123 hacker 789 677 fun")
ret1 = re.split(r" ", "myon 123 hacker 789 677 fun", 3)
ret2 = re.split(r" ", "myon 123 hacker 789 677 fun", 4)
print(ret)
print(ret1)
print(ret2)

运行结果:

关于 re 库正则匹配的基本用法以及一些常用方法函数的介绍就是这些

下一篇博客我们将继续介绍 re 库正则匹配常用的匹配规则和一些常见操作

希望上述讲解对大家理解和学习Python有帮助!

期待大家的关注与支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pandas设置图像宽高、分辨率、背景色、显示中文、增加子区域、图题、坐标名称、网格线

figure方法 figure方法可以设置绘图对象的长、宽、分辨率及背景颜色等。 import pandas as pd import matplotlib.pyplot as pltdata pd.read_csv(data/iris.csv) plt.figure(figsize(12, 3), dpi120, facecolorred) x data[sepal_length] plt.plot(x) plt.show()一个平面多…

【K8S 云原生】K8S的安全机制

目录 一、K8S安全机制概述 1、概念 2、请求apiserver资源的三个步骤: 一、认证:Anthentcation 1、认证的方式: 1、HTTP TOKEN: 2、http base: 3、http证书: 2、认证的访问类型: 3、签发…

【并发编程】指令集并行原理

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳重求进,晒太阳 指令集并行原理 名词: Clock Cycle Time CPU的Clock Cycle Time(时钟周期时间),等于主频的倒数。意思是CPU能识别的最…

VR数字展厅,平面静态跨越到3D立体化时代

近些年,VR的概念被越来越多的人提起,较为常见的形式就是VR数字展厅。VR数字展厅的出现,让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新,同时也意味着展览传播的方式不再局限于原来的图文、视频,而是…

redis的备份原理

1 Redis持久化之RDB 1RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里 2备份是如何执行的 Redis会单独创建(fork)一个子进程来进行持久化&#x…

星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布

12月15日,2023 英特尔新品发布会暨 AI 技术创新派对上,星环科技基于第五代英特尔至强可扩展处理器的Transwarp Hippo分布式向量数据库解决方案重磅发布。该方案利用第五代英特尔至强可扩展处理器带来的强大算力,实现了约 2 倍的代际性能提升&…

2021 Google Chrome RCE漏洞分析

一、复现环境: Win10 Google Chrome 86.0.4240.75 二、利用复现: 关闭沙箱安全使用命令进行关闭 ,在正常情况下,浏览器沙箱提供了一个受限制的执行环境,以防止恶意代码对用户系统的损害。关闭沙箱可能会导致浏览器执…

银行数据仓库体系实践(7)--数据模型设计及流程

数据仓库作为全行或全公司的数据中心和总线,汇集了全行各系统以及外部数据,通过良好的系统架构可以保证系统稳定性和处理高效性,那如何保障系统数据的完备性、规范性和统一性呢?这里就需要有良好的数据分区和数据模型,…

「JavaSE」抽象类接口3

🎇个人主页:Ice_Sugar_7 🎇所属专栏:快来卷Java啦 🎇欢迎点赞收藏加关注哦! 抽象类&接口3 🍉Clonable 接口和深拷贝🍌浅拷贝和深拷贝 🍉Object类🍉抽象类…

Effective C++ 学习

Effective C浅浅学习,很多不太理解 尽量用const, enum, inline 替换#define尽可能使用const确认对象在使用前就已经被初始化构造,析构,赋值运算,拷贝构造为多态基类声明virtual析构函数不要让析构函数抛出异常不在构造和析构过程中…

javaWebssh宠物基地管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh宠物基地管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

跨平台Recorder录音插件:支持多种格式、音频可视化、实时上传、语音识别

视频教程地址:【跨平台Recorder录音插件:支持多种格式、音频可视化、实时上传、语音识别】 https://www.bilibili.com/video/BV1jQ4y1c7e4/?share_sourcecopy_web&vd_sourcee66c0e33402a09ca7ae1f0ed3d5ecf7c /** 先引入Recorder ( 需先…

幻兽帕鲁服务器数据备份

搭建幻兽帕鲁个人服务器,最近不少用户碰到内存不足、游戏坏档之类的问题。做好定时备份,才能轻松快速恢复游戏进度 这里讲一下如何定时将服务器数据备份到腾讯云轻量对象存储服务,以及如何在有需要的时候进行数据恢复。服务器中间的数据迁移…

CI/CD

介绍一下CI/CD CI/CD的出现改变了开发人员和测试人员发布软件的方式,从最初的瀑布模型,到最后的敏捷开发(Agile Development),再到今天的DevOps,这是现代开发人员构建出色产品的技术路线 随着DevOps的兴起,出现了持续集成,持续交付和持续部署的新方法,传统的软件开发和交付方…

一文学习Thrift RPC

Thrift RPC引言 Thrift RPC的特点 Thrift 是一个RPC的框架,和Hessian RPC有什么区别,最重要的区别是Thrift可以做异构系统开发。 什么是异构系统,服务的提供者和服务的调用者是用不同语言开发的。 为什么会当前系统会有异构系统的调用&…

Vue3 Teleport 将组件传送到外层DOM位置

✨ 专栏介绍 在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使…

音频前置放大器电路图大全

音频前置放大器电路图(一) 在本设计中,前置放大器的增益控制采用直流音量控制方式,其具体实现如图1所示。前置放大器是由全差分运放和电阻构成的反相比例放大器,其增益由反馈电阻与输人电阻的比值决定。外部输人的直流…

【Leetcode】2859. 计算 K 置位下标对应元素的和

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的…

WebSocket实现HTML+SpringBoot聊天功能,小程序+SpringBoot聊天功能

目录 一、认识WebSocket 二、HTML实现聊天 三、微信小程序实现聊天 一、认识WebSocket 1.首先博主在初学Java时自我感觉走了很多弯路,因为以前见识短,在接触聊天功能时根本就没能想到有WebSocket这个聊天框架,就只能用底层的UDP或TCP实现聊…

基于Spring Boot的饮食分享平台设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…