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

34.Python从入门到精通—Python3 正则表达式检索和替换

34.从入门到精通:Python3 正则表达式检索和替换 repl 参数是一个函数 正则表达式对象 正则表达式修饰符 - 可选标志 正则表达式模式* 正则表达式实例

    • 检索和替换
    • repl 参数是一个函数
    • 正则表达式对象
    • 正则表达式修饰符 - 可选标志
    • 正则表达式模式*
    • 正则表达式实例

检索和替换

在 Python 的 re 模块中,可以使用 re.sub() 函数来进行字符串的检索和替换。
re.sub() 函数的语法如下:

re.sub(pattern, repl, string, count=0, flags=0)

其中,pattern 表示要匹配的正则表达式,repl 表示要替换成的字符串,string 表示要进行替换的字符串,count
表示最多替换的次数,flags 表示正则表达式的匹配模式。

以下是一个简单的例子,说明如何使用 re.sub() 函数进行字符串的替换:

import retext = "Hello, world! This is a test."
pattern = r"\b\w{4}\b"
repl = "****"
new_text = re.sub(pattern, repl, text)
print(new_text)

在这个例子中,首先定义了一个要进行替换的字符串 text,然后使用正则表达式 \b\w{4}\b 匹配所有长度为 4 的单词,并使用
**** 进行替换。最后使用 re.sub() 函数进行替换,并将替换后的字符串赋值给 new_text 变量,最后输出 new_text。

需要注意的是,re.sub() 函数并不会修改原始字符串,而是返回一个新的字符串。如果要修改原始字符串,可以直接对原始字符串进行赋值。

repl 参数是一个函数

  • 在 Python 的 re 模块中,re.sub() 函数可以用于在字符串中替换匹配的子串。re.sub() 函数的第一个参数是正则表达式,第二个参数是要替换成的字符串,第三个参数是要搜索的字符串。
  • 除此之外,re.sub()函数还可以接受一个可调用对象作为第二个参数,这个可调用对象可以根据匹配结果返回一个新的字符串。这个可调用对象通常被称为 repl 函数。

以下是一个简单的例子,说明如何使用 repl 函数:

import re# 要替换的字符串
text = "Hello, world! This is a test."
# 替换所有的单词为大写字母
pattern = r"\w+"
new_text = re.sub(pattern, lambda match: match.group().upper(), text)
# 输出替换结果
print(new_text)

在这个例子中,首先定义了一个要替换的字符串 text,然后使用 re.sub() 函数替换所有的单词为大写字母。在第二个参数中,使用了一个匿名函数来将匹配结果转换为大写字母。最后输出替换结果。

需要注意的是,repl 函数必须接受一个参数,这个参数是一个匹配对象,可以通过调用 group() 方法来获取匹配的字符串。repl 函数可以返回任何类型的对象,但必须返回一个字符串,否则会抛出 TypeError 异常。

正则表达式对象

在 Python 的 re 模块中,正则表达式对象是通过 re.compile() 函数创建的。正则表达式对象可以重复使用,可以提高程序的效率,尤其是在需要多次使用同一个正则表达式时。
以下是一个简单的例子,说明如何使用正则表达式对象:

import re# 创建正则表达式对象
pattern = re.compile(r'\d+')# 使用正则表达式对象进行匹配
text = 'There are 123 apples and 456 oranges.'
match_obj = pattern.search(text)
print(match_obj.group())  # 输出结果:123

在这个例子中,首先使用 re.compile() 函数创建了一个正则表达式对象 pattern,然后使用 pattern.search( 方法进行匹配。正则表达式对象可以多次使用,可以在程序的其他地方使用同一个对象进行匹配。

  • 需要注意的是,使用正则表达式对象进行匹配时,可以使用正则表达式对象的 search()、match()、findall()等方法。另外,正则表达式对象还可以通过调用 pattern.sub() 方法来进行替换操作。
  • 正则表达式对象还可以接受一些参数,用于指定正则表达式的匹配模式。例如,可以通过 re.compile() 函数的 flags参数来指定正则表达式的匹配模式。

正则表达式修饰符 - 可选标志

在 Python 的 re 模块中,可以使用正则表达式修饰符(也称为可选标志)来更改正则表达式的匹配行为。正则表达式修饰符是在正则表达式模式中以特殊字符的形式出现的,用于指定匹配模式。
以下是一些常用的正则表达式修饰符:

在这里插入图片描述

可以使用 re.compile() 函数来指定正则表达式修饰符。例如:

import re# 不区分大小写的匹配
pattern = re.compile("hello", re.IGNORECASE)
match_obj = pattern.search("Hello, world!")
print(match_obj.group())  # 输出 "Hello"

在这个例子中,首先使用 re.compile() 函数指定了正则表达式模式 “hello” 和修饰符re.IGNORECASE,这表示进行不区分大小写的匹配。然后使用 pattern.search() 函数在字符串 “Hello,world!” 中搜索匹配结果,最后输出匹配结果。

  • 需要注意的是,正则表达式修饰符可以同时使用多个,可以通过按位或运算符 | 来组合它们。例如,re.IGNORECASE | re.MULTILINE 表示同时使用不区分大小写的匹配和多行匹配。

正则表达式模式*

在 Python 的 re 模块中,正则表达式模式是用于匹配字符串的模式。正则表达式模式由一些特殊字符和普通字符组成,用于指定匹配规则。
以下是一些常用的正则表达式模式:
在这里插入图片描述

需要注意的是,正则表达式模式中的特殊字符需要进行转义,例如 . 表示匹配一个点号。可以使用反斜杠 \ 来进行转义。
以下是一个简单的例子,说明如何使用正则表达式模式:

import re# 匹配所有的数字
pattern = "\d+"
match_obj = re.search(pattern, "There are 123 apples and 456 oranges.")
print(match_obj.group())  # 输出 "123"

在这个例子中,正则表达式模式 “\d+” 表示匹配一个或多个数字字符。使用 re.search() 函数在字符串 “There are
123 apples and 456 oranges.” 中搜索匹配结果,最后输出匹配结果。

正则表达式实例

下面是一些正则表达式的实例:

匹配手机号码

import repattern = re.compile(r'^1[3-9]\d{9}$')
phone_number = '13888888888'
if pattern.match(phone_number):print('Valid phone number')
else:print('Invalid phone number')

匹配电子邮件地址

import repattern = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
email = 'example@example.com'
if pattern.match(email):print('Valid email address')
else:print('Invalid email address')

匹配身份证号码

import repattern = re.compile(r'^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9Xx]$')
id_number = '110101199001011234'
if pattern.match(id_number):print('Valid ID number')
else:print('Invalid ID number')

匹配 URL

import repattern = re.compile(r'^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/\S*)?$')
url = 'https://www.example.com/path/to/page.html'
if pattern.match(url):print('Valid URL')
else:print('Invalid URL')

这些正则表达式只是一些常见的例子,实际上正则表达式可以匹配各种各样的文本模式。需要注意的是,正则表达式的性能可能会受到匹配的文本长度和复杂度的影响,需要谨慎使用。

相关文章:

34.Python从入门到精通—Python3 正则表达式检索和替换

34.从入门到精通:Python3 正则表达式检索和替换 repl 参数是一个函数 正则表达式对象 正则表达式修饰符 - 可选标志 正则表达式模式* 正则表达式实例 检索和替换repl 参数是一个函数正则表达式对象正则表达式修饰符 - 可选标志正则表达式模式*正则表达式实例 检索和…...

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerExceptio、,mapper为null【解决方法】

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerException、mapper为null【解决方法】 问题描述问题分析解决方案创建SpringBootBeanUtil编写调用方法 executeMethod调用 总结 问题描述 在使用Spring Boot时,我们希望能够通过反射动态调用…...

内网安全之域内密码喷洒

域内密码喷洒一般和域内用户名枚举一起使用,可以在无域内凭据的情况下,通过枚举出域内存在的用户名,进而对域内存在的用户名进行密码喷洒,以此来获得域内有效凭据。 在Kerberos协议认证的AS-REQ阶段,请求包cname对应的…...

何为HTTP状态码?一文清楚基本概念。

在客户端与服务器之间的信息传输过程中,我们可以将其比喻为客户与快递员之间的包裹传递。那么服务器是如何通知客户端,操作是成功还是失败?或者有其他的一些情况呢?(就像客户可以查询快递的状态) 而这背后…...

SV学习笔记(七)

文章目录 类型转换写在前面动态转换子类句柄赋值于父类句柄父类句柄转换为子类句柄 虚方法写在前面非虚函数的调用虚函数的调用虚方法的建议为什么使用虚方法 对象拷贝写在前面赋值和拷贝总结 回调函数写在前面实例完成回调函数功能需要三步: 参数化类写在前面实现一…...

Windows SDK(五)按钮静态文本与编辑框控件

我们首先应该知道,所谓按钮静态文本等等控件都是窗口,他们都是隶属于父窗口下的子窗口,所 以在创建控件前,我们要首先创建一个父窗口,此处我们直接使用Windows桌面程序创建时,程 序自动为我们创建的一个窗…...

基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架实现的在线心理评测与咨询系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…...

GD32F470_ DS18B20温度传感器模块移植

DS18B20温度传感器 DS18B20数字温度传感器提供9位至12位精度的温度测量,并具有非易失性用户可编程上下触发点报警功能。DS18B20通过单总线通信,根据定义,只需要一条数据线(和地线)即可与单片机通信。此外,DS18B20可以直接从数据线…...

【JAVASE】带你了解instanceof和equals的魅力

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 1.instanceof instanceof 是 Java 的保留关键字。它的作用是测试…...

【Linux】进程控制详解

目录 前言 进程创建 认识fork 写时拷贝 再谈fork 进程终止 进程退出码 用代码来终止进程 常见的进程终止的方式 exit _exit 进程等待 进程等待的必要性 进程等待的方式 wait waitpid 详解status参数 详解option参数 前言 本文适合有一点基础的人看的&#…...

Mysql 高性能的sql优化方案和建议

优化MySQL的性能是一项复杂而关键的任务,它可以通过多种方式来实现。下面是一些SQL优化的方案和建议: 索引优化: 确保经常查询的列都有索引。但不要过度索引,因为它可能会增加写入操作的开销。使用组合索引来覆盖多个查询条件。…...

鸿蒙实战开发:【实现应用悬浮窗】

如果你要做的是系统级别的悬浮窗&#xff0c;就需要判断是否具备悬浮窗权限。然而这又不是一个标准的动态权限&#xff0c;你需要兼容各种奇葩机型的悬浮窗权限判断。 fun checkPermission(context: Context): Boolean if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)…...

应用开发:python解析斗鱼弹幕

解决问题 互动弹幕&#xff0c;关注提问 &#xff0c;ai回答 技术 python playwright 调用接口 https://github.com/broven/DouYudanmu/blob/master/douyu.py 演示 放弃 这个根本不是研究方向 定位错误 你浪费下午时间&#xff0c;定位错误 这个跟本不是你的方向。 4个小时看斗…...

【面试经典150 | 动态规划】交错字符串

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;动态规划 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行…...

设计模式(17):中介者模式

核心&#xff1a; 如果一个系统中对象之间的联系呈现网状结构&#xff0c;对象之间存在大量多对多关系&#xff0c;导致关系及其复杂&#xff0c;这些对象称为“同事对象”。我们可以引入一个中介者对象&#xff0c;使各个同事对象只跟中介者对象打交道&#xff0c;将复杂的网…...

echart 折线图或散点图当横坐标为小数位时,若想显示整数该如何处理?

如图当前是这样的&#xff1a; 横坐标刻度目前是小数位&#xff0c;如果直接将小数位取整则会失去精度&#xff0c;所以我们要做的是刻度即是整数&#xff0c;又能显示小数位对应的数值&#xff1b; 思路就是直接手动设置刻度&#xff1a;设置xAxis的min,max,splitNumber,同时不…...

一套C#自主版权+应用案例的手麻系统源码

手术麻醉信息管理系统源码&#xff0c;自主版权应用案例的手麻系统源码 手术麻醉信息管理系统包含了患者从预约申请手术到术前、术中、术后的流程控制。手术麻醉信息管理系统主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配&#xff0c…...

31.2k star, 免费开源的白板绘图工具 tldraw

31.2k star, 免费开源的白板绘图工具 tldraw 分类 开源分享 项目名: tldraw -- 无限画布白板 Github 开源地址&#xff1a; https://github.com/tldraw/tldraw 在线测试地址&#xff1a; tldraw 文档地址&#xff1a; tldraw SDK tldraw 是一款开源免费的无限画布白板&…...

Redis开源协议调整,我们怎么办?

2024年3月20日, Redis官方宣布&#xff0c;从 Redis 7.4版本开始&#xff0c;Redis将获得源可用许可证 ( RSALv2 ) 和服务器端公共许可证 ( SSPLv1 ) 的双重许可&#xff0c;时间点恰逢刚刚完成最新一轮融资&#xff0c;宣布的时机耐人寻味。 Redis协议调整&#xff0c;对云计算…...

干了三年外包。。。忘了什么是CICD。。。

干了三年外包。。。忘了什么是CICD。。。 CI/CD(持续集成与持续交付) 是一种软件开发实践&#xff0c;它可以帮助我们更快地交付高质量的软件产品。CI/CD的核心思想是将软件开发过程中的各个阶段自动化&#xff0c;从而减少人工干预&#xff0c;提高开发效率和产品质量。本文将…...

【LeetCode】454. 四数相加 II

目录 题目 思路 代码 题目 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1…...

搜索(DFS BFS)

DFS 常规DFS: 二叉树前序,中序&#xff0c;后序遍历-CSDN博客 void postorderTraversal(root)初始化一个空列表 arrfind访问总树(root,arr)return arrvoid find(temp, arr)if temp 为空return // 调用顺序由前中后序决定find递归访问左子树find递归访问右子树arr加入当前节点…...

koc和kol是什么意思?

一、koc和kol是什么意思&#xff1f; koc和kol是专业术语。KOC是关键意见消费者的意思&#xff0c;是Key Opinion Consumer的缩写&#xff1b;KOL是关键意见领袖的意思&#xff0c;是Key Opinion Leader的缩写。 1、关键意见领袖kol “关键意见领袖”通俗地讲是达人。这些人…...

基于vscode Arduino插件开发Arduino项目

基于vscode Arduino插件开发arduino项目 插件配置问题记录1. 指定编译输出文件夹2. 编译下载时不输出详细信息3. 输出端口信息乱码4. 通过串口输出中文&#xff0c;vscode对应的串口助手上会显示乱码&#xff08;未解决&#xff09; 插件配置 环境&#xff1a;Arduino插件版本…...

AI 驱动强大是视频转换处理软件

由 AI 驱动的视频工具包。 增强、转换、录制和编辑视频AI 驱动的顶级视频工具包。 不论是老旧、低质、噪声或模糊的影片/图像&#xff0c;都能升级至 4K&#xff0c;稳定抖动的影片&#xff0c;提升帧率至 120/240fps&#xff0c;并能以全面 GPU 加速进行转换、压缩、录制和编辑…...

Python+requests+Pytest+logging+allure+pymysql框架详解

一、框架目录结构 1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言 数据库断言 前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据 图片数据等;3)testcases目录用来存放测试用例,一个python文件对应…...

菜鸟笔记-Numpy函数-full/random.randint/random.choice

full函数 numpy.full 是 NumPy 库中的一个函数&#xff0c;它用于创建一个具有指定形状、数据类型和填充值的数组。此函数非常有用&#xff0c;因为它允许你快速生成一个具有相同值的数组&#xff0c;而无需手动设置每个元素。 1函数介绍 numpy.full(shape, fill_value, dty…...

蓝桥杯每日一题:牛的学术圈I(二分,双指针)

由于对计算机科学的热爱&#xff0c;以及有朝一日成为 「Bessie 博士」的诱惑&#xff0c;奶牛 Bessie 开始攻读计算机科学博士学位。 经过一段时间的学术研究&#xff0c;她已经发表了 N篇论文&#xff0c;并且她的第 i 篇论文得到了来自其他研究文献的 ci次引用。 Bessie 听…...

fping命令

fping是一个用于网络扫描的工具&#xff0c;它可以在 Linux 系统上使用。fping可以发送 ICMP ECHO_REQUEST&#xff08;即 ping&#xff09;数据包到指定的网络地址范围&#xff0c;并等待响应。通过这种方式&#xff0c;fping可以用来检测哪些 IP 地址是活跃的。 可以测试多个…...

奇富科技推出新一代全自研智能语音模型,打破沟通壁垒

“您好&#xff01;请问是李先生噻&#xff1f;” 李先生刚接起电话&#xff0c;就被这熟悉的乡音逗乐了。这不是他所预料的常规客服&#xff0c;而是奇富科技新一代全自研智能语音模型——QI语精灵。这款模型不仅能用方言与人自然交流&#xff0c;还能在智能营销、贷后提醒、风…...

网站特效js代码/seo网络优化培训

在企业中&#xff0c;有很多种文件系统的部署&#xff0c;在这里我这边记录一下DFS分布式文件系统的部署&#xff0c;试验环境在windows server 2012系统中部署完成&#xff0c;此次架构如下图在微软的文件系统中&#xff0c;文件系统发展经历了一些历程&#xff0c;下图为文件…...

环球旅行社网站建设规划书论文/百度推广最简单方法

当类似Bash的脚本以二进制形式执行而没有shebang时&#xff0c;如何确定由谁执行&#xff1f;我猜想 使用 shebang运行普通脚本是由binfmt_scriptLinux模块处理的&#xff0c;该模块检查shebang&#xff0c;解析命令行并运行指定的脚本解释器。但是&#xff0c;如果有人在没有脚…...

怎么建立网站数据库/百度竞价推广

1月17日&#xff0c;百度输入法在北京举办了主题为“AI输入&#xff0c;开启全感官输入时代”的发布会。大会上&#xff0c;百度输入法宣布&#xff0c;截至目前百度输入法月活用户已达4亿&#xff0c;语音输入日流量超过2.5亿&#xff0c;接下来还会为百度输入法加入一些列AI功…...

网站开发工程师怎么样/免费网站推广软件哪个好

*bootstrap官方说明&#xff1a;http://v3.bootcss.com/javascript/#popovers一. popover常用配置参数&#xff1a;1 //常用配置参数&#xff1a;2 $(document).ready(function() {3 $(#temp).popover(4 {5 trigger:click, //触发方式6 template: , //你自定义的模板7 title:&q…...

vs2010做网站教程/销售成功案例分享

CREATE GLOBAL TEMPORARY TABLE TABLENAME (COL1 VARCHAR2(10),COL2 NUMBER) ON COMMIT PRESERVE(DELETE) ROWS ;--ON COMMIT DELETE ROWS 说明临时表是事务指定&#xff0c;每次提交后ORACLE将截断表(删除全部行)---------------------------------------在Oracle8i中&#…...

一级a做受片免费网站/好的网络推广平台

一、类的属性下划线命名 _XXX单下划线:私有化属性或方法,允许类本身、类对象、子类进行访问,不能被 from module import * 方式导入不能被模块外部使用,不能完全做到真正的私有,只是约定俗成的而已,这样写表示不希望这个变量在外部被直接调用__XXX 双下划线 : 私有类型的…...