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

目录

一、基本用法

二、函数介绍

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有帮助!

期待大家的关注与支持!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux管道学习(无名管道)

目录 1、概述 2、管道的创建 3、管道读写行为 3.1、管道读 在linux中管道有两种,一是无名管道(匿名管道),第二种是有名管道;无名管道主要用于有血缘关系的父子进程间通信,有名管道则不受该限制&#xf…

描绘未知:数据缺乏场景的缺陷检测方案

了解更多方案内容,欢迎您访问官网:neuro-T | 友思特 机器视觉 光电检测;或联系销售经理:18124130753 导读: 深度学习模型帮助工业生产实现更加精确的缺陷检测,但其准确性可能受制于数据样本的数量。友思特…

Gradle学习笔记:Gradle的简介、下载与安装

文章目录 一、什么是Gradle二、为什么选择Gradle三、下载并安装Gradle四、Gradle的bin目录添加到环境变量五、测试Gradle是否安装正常 一、什么是Gradle Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写&…

科大讯飞 再次引爆Ai

去年「科大讯飞版ChatGPT」星火大模型刚上线的时候,小编给大家推荐过一波,演示了其强大的功能,不少小伙伴都立马申请体验了一把,有小伙伴还私信我说功能非常强大,工作效率提高不少,支持国产大模型之类赞扬。…

idea 打包跳过测试

IDEA操作 点击蓝色的小球 手动命令 mvn clean package -Dmaven.test.skiptrue

音频格式之AAC:(2)AAC封装格式ADIF,ADTS,LATM,extradata及AAC ES存储格式

系列文章目录 音频格式的介绍文章系列: 音频编解码格式介绍(1) ADPCM:adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 :音频格式之MP3:(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 :音频格式之MP3&#x…

unity学习笔记----游戏练习07

一、僵尸攻击和植物的掉血和销毁 当僵尸接触到植物开始攻击时会持续削减植物的血量,当植物血量为零时就销毁当前植物。 在plantManager中, 为植物添加一个血量HP 100, public int HP 100; 在写一个减少血量的方法,来减少血…

【RabbitMQ】交换机的概念及使用

一、引言 1、什么是交换机 RabbitMQ中,交换机是一个核心概念,主要用来将生产者生产出来的消息,传送到对应的队列中。实际上,生产者生产的消息从不会直接发送到队列,而是发送到交换机。交换机一方面接收来自生产者的消…

golang入门

学习方法 1、在实践中学 2、适当的囫囵吞枣,有可能学到后面,对前面的疑问焕然大悟 3、注重整体,刚开始不要去扣细节 安装 需要配置3个环境变量,如果.msi文件安装时设置好了就不需要了,自己可以检查下 GOROOT&…

【Unity】粒子贴图异常白边问题

从PS制作的黑底,白光的贴图。放入Unity粒子中,拉远看会有很严重的白边,像马赛克一样。 材质使用:Mobile/Particles/Additive 经测试只使用一张黑色的图片,也会有白边。 解决方案: 关闭黑色底&#xf…

web前端之不一样的居中方式、解决tabBar选项卡居中问题、css支持嵌套、auto

MENU 前言htmlstyle效果 前言 这里不能使用justify-content: center;&#xff0c;因为在小屏幕上&#xff0c;这种方式无法显示最前面的两个tabBar。 html <div id"box" class"d_f o_a mt_50 mb_50 ml_20 mr_20"><div class"ws_n">…

【网站项目】新冠疫情隔离人员信息管理系统(有源码)

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择: 《Springboot网站项目…

Hadoop3.x学习笔记

文章目录 一、Hadoop入门1、Hadoop概述1.1 简介1.2 hadoop优势1.3 hadoop组成1.4 大数据技术生态体系 2、环境准备(重点)2.1 模板机配置2.2 模板创建 3、本地运行模式&#xff08;官方WordCount&#xff09;4、Hadoop集群搭建(&#x1f31f;重点)4.1 环境准备(集群分发脚本xsyn…

[GXYCTF2019]BabyUpload1

尝试各种文件&#xff0c;黑名单过滤后缀ph&#xff0c;content-type限制image/jpeg 内容过滤<?&#xff0c;木马改用<script languagephp>eval($_POST[cmdjs]);</script> 上传.htaccess将上传的文件当作php解析 蚁剑连接得到flag

水波浪标题

上图效果要先复制第13次修改的备忘录&#xff0c;再另外保存下面的代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <a class"a-href a-h">水波浪标题</a> <style>.h1-div {/* 隐藏 */display: none;}h1 {display: inli…

[docker] Docker镜像的创建以及Dockerfile的使用

一、Dokcer镜像的创建 创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 1.1 基于现有镜像创建 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改docker run -it --name web centos:7 /bin/bash …

代码随想录算法训练营第十四天|二叉树基础-二叉树迭代-二叉树

文章目录 二叉树基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树的存储方式链式存储顺序存储 二叉树的遍历方式二叉树的定义 二叉树的递归遍历144.二叉树的前序遍历代码&#xff1a; 145.二叉树的后序遍历代码&#xff1a; 94. 二叉树的中序遍历代码 二叉树的…

LEETCODE 164破解闯关密码

class Solution { public:string crackPassword(vector<int>& password) { //在比较两个字符串大小时&#xff0c;其实是按照字典序逐个比较它们的字符。首先比较两个字符串的第一个字符&#xff0c;如果它们不相等&#xff0c;则可以根据它们的 ASCII 码大小确定它们…

SpringBoot+MyBatis使用pagehelper分页插件及其注意事项(含解决分页不生效问题)

1 前言 近期在做项目的时候&#xff0c;遇到了一个问题&#xff1a;在使用MyBatis的分页插件&#xff08;pagehelper&#xff09;时&#xff0c;发现其分页不生效&#xff0c;找了许多方法才得以解决&#xff0c;故写下这篇文章记录一下&#xff0c;帮助跟我遇到同样问题的同学…

Python lambda函数

Python是一种功能强大的编程语言&#xff0c;具有许多特性和工具&#xff0c;其中之一是Lambda函数。Lambda函数是一种轻量级的匿名函数&#xff0c;可以快速定义和使用小型函数&#xff0c;而无需显式命名。本文将深入探讨Python中的Lambda函数&#xff0c;包括其语法、用途、…