python正则表达式re.sub()函数解析(替换字符串中的匹配项)

news2024/10/6 6:43:58

文章目录

  • Python正则表达式与re.sub()函数解析
    • 引言
    • 正则表达式基础
      • 什么是正则表达式?
      • 正则表达式的组成
    • Python中的re模块
      • re模块概览
      • re模块常用函数
    • re.sub()函数解析
      • 函数原型
      • 使用示例
        • 简单替换
        • 使用函数进行替换
      • 高级替换技术
        • 引用分组
        • 条件替换
    • 总结

Python正则表达式与re.sub()函数解析

引言

在文本处理领域,正则表达式是一种强大的工具,用于字符串的搜索、替换和解析。Python中通过re模块提供了对正则表达式的支持,其中re.sub()函数是实现替换功能的关键方法。本文将从正则表达式的基础知识开始,深入探讨re.sub()函数的使用及其高级特性。

正则表达式基础

什么是正则表达式?

正则表达式(Regular Expression)是用于描述字符序列模式的语法规则集合。它可以用来检查一个串是否含有某种子串、将匹配的子串替换或从中提取出子串等。

正则表达式的组成

正则表达式由文字字符和特殊字符组成。其中,特殊字符称为元字符,包括但不限于以下几种:

  • .:匹配除换行符之外的任何单个字符。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • *:前面的子表达式零次或多次扩展。
  • +:前面的子表达式一次或多次扩展。
  • ?:前面的子表达式零次或一次扩展。
  • {m,n}:扩展前面的子表达式至少m次,不超过n次。
  • [...]:匹配方括号内的任意字符。
  • |:选择,匹配前后任意一个表达式。
  • ( ):标记一个子表达式的开始和结束位置。

Python中的re模块

re模块概览

re模块提供了正则表达式的实现,支持各种操作,如模式匹配、替换、搜索和分割等。使用re模块之前,需要先导入:

import re

re模块常用函数

  • re.match():从字符串起始位置匹配一个模式。
  • re.search():搜索整个字符串并返回第一个成功的匹配。
  • re.findall():找到正则表达式匹配的所有子串,并返回一个列表。
  • re.finditer():找到正则表达式匹配的所有子串,并以迭代器返回。
  • re.split():按照能够匹配的子串将字符串分割后返回列表。
  • re.sub():替换字符串中的匹配项。
  • re.compile():将一个字符串编译为一个 Pattern 对象。

re.sub()函数解析

函数原型

re.sub()函数的原型如下:

re.sub(pattern, repl, string, count=0, flags=0)
  • pattern:正则表达式的模式或者模式对象。
  • repl:用于替换的字符串,也可以是一个函数。
  • string:要被处理的,即要被pattern匹配的字符串。
  • count:模式匹配后替换的最大次数,默认为0,表示替换所有的匹配。
  • flags:标志位,用于修改正则表达式的匹配方式,如忽略大小写、多行匹配等。

使用示例

简单替换
text = "The quick brown fox jumps over the lazy dog"
result = re.sub(r'the', 'a', text, flags=re.IGNORECASE)
print(result)  # A quick brown fox jumps over a lazy dog

在这个例子中,re.sub()将所有形式的"the"替换为"a",注意到使用了re.IGNORECASE来忽略大小写。

使用函数进行替换
import re

def dashrepl(matchobj):
    if matchobj.group(0) == '-':
        return ' '
    else:
        return '-'

result = re.sub('-{1,2}', dashrepl, 'pro----gram-files')
print(result)

在这里插入图片描述

在这个例子中,re.sub()利用一个函数作为替换逻辑,每次匹配时都会调用该函数。

高级替换技术

re.sub()不仅可以进行简单的字符串替换,还可以实现复杂的逻辑,比如引用分组、条件判断等。

引用分组
import re

text = "Hello 123456, welcome to 78910."
result = re.sub(r'(\d+)', r'[\1]', text)
print(result)  # Hello [123456], welcome to [78910].

在这里插入图片描述

使用\1来引用第一个匹配的分组。

条件替换

通过传入替换函数,可以根据匹配情况执行不同的替换逻辑。

import re


def complex_repl(matchobj):
    if int(matchobj.group(0)) % 2 == 0:
        return 'even'
    else:
        return 'odd'


result = re.sub(r'\d+', complex_repl, 'Numbers: 1 2 3 4 5 6 7 8 9')
print(result)  # Numbers: odd even odd even odd even odd even odd

在这里插入图片描述

在这个例子中,替换函数根据匹配到的数字是奇数还是偶数返回不同的字符串。

总结

re.sub()函数是Python正则表达式工具箱中非常有用的一个工具,可以处理复杂的文本替换任务。掌握其用法对于任何需要文本处理的程序员来说都是极其重要的。通过上述示例和解释,我们对re.sub()函数有了更加深入的了解,并可以在实际编程中灵活运用。

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

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

相关文章

双11后观察:中国电商产业带的数字新叙事

在电商平台走过的第十五个双11后,产业带的数字化蓝图也更加完整。但在电商平台与产业带相互补足的背景下,一个更值得思考的问题是,随着电商平台的低价竞争愈演愈烈,产业带上的供应链能力能否跟上? 作者|思杭 编辑|皮…

GTC2023全球流量大会蓄势待发,菊风在7B57展位等你!

第六届 GTC 全球流量大会(以下简称 GTC2023)将于12月5日- 6日,在深圳福田会展中心7&8号馆举办。 据悉,本届大会将是历届以来规模最大、参与人数最多、跨境出海资源最丰富的一次行业盛会。7、8 号馆共 15000 平方米&am…

SSM大学生社团信息管理系统-99953,(免费领取源码)计算机毕业设计选题开题+程序定制+论文书写+答辩ppt书写 包售后 全流程

SSM大学生社团信息管理系统APP 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,高校当然也不能排除在外。大学生社团信息管理系统APP是以实际运用为开发背景&#xff0c…

IDEA回滚代码到指定版本

1. 先建一个分支 2. git日志,我们想要回滚类删除以前的版本恢复这个测试类 3. 右键日志版本,进行reset 4. 这里直接选择hard 5.可以看到已经恢复 6.推送到远程分支 7.这里选择强制推送 如果没有此标,直接git push --force 8. 切换master不影响…

RK3568驱动指南|第七篇-设备树-第68章 ranges属性实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

IDC最新报告,增速减缓+AI增势,阿里云视频云中国市场第一

国际权威数据公司IDC发布 《中国视频云市场跟踪(2023 H1)》报告 自2018年至今,阿里云持续保持 中国视频云整体市场第一 整体市场占比达24.4% 01 第一之外,低谷之上 近期,国际权威数据公司IDC最新发布了《中国视频…

万宾科技可燃气体监测仪的功能有哪些?

随着城市人口的持续增长和智慧城市不断发展,燃气作为一种重要的能源供应方式,已经广泛地应用于居民生活和工业生产的各个领域。然而燃气泄漏和安全事故的风险也随之增加,对城市的安全和社会的稳定构成了潜在的威胁。我国燃气管道安全事故的频…

[C/C++]数据结构 循环队列

前言: 队列是一种具有先进先出特性的结构,但是当数据出队列以后,前面的空间就无法再次利用了,循环队列就可以解决这个问题 一:概念及结构: 1.循环队列概念 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队…

2023软件测试6大实战练手项目,你不打算看看嘛

前言 写了9年多年的代码,之前做过网易的架构师,在技术这条路上跌跌撞撞了很多,我今天在这里向大家介绍6个适合新人练手的项目,这些项目来自不同领域和行业,涵盖了金融、医药、电商等多个领域。如果您正在寻找一个可以…

【开源】基于Vue和SpringBoot的企业项目合同信息系统

项目编号: S 046 ,文末获取源码。 \color{red}{项目编号:S046,文末获取源码。} 项目编号:S046,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合…

Matlab通信仿真系列——离散信号和系统

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、离散信号 1、离散信…

Git控制指令

git status查看当前本地分支的修改状态 git diff 文件路径 查看具体文件的修改内容 git log打印用户信息 git remote -v查看远程地址 git checkout -- *还原被删除的文件 git rm -r --force .删除本地所有文件 git commit -m "Remove all files from repositor…

【Kotlin精简】第9章 Kotlin Flow

1 前言 上一章节我们学习了Kotlin的协程【Kotlin精简】第8章 协程,我们知道 协程实质是对线程切换的封装,能更加安全实现异步代码同步化,本质上协程、线程都是服务于并发场景下,其中协程是协作式任务,线程是抢占式任务…

XML创建IOC容器的过程

Spring框架的核心之一是IOC,那么我们是怎么创建出来的Bean呢? 作者进行了简单的总结,希望能对你有所帮助。 IOC的创建并不是通过new而是利用了java的反射机制,利用了newInstance方法进行的创建对象。 首先,我们先定义…

数智赋能 | 迅镭激光中标起重装备龙头株洲天桥起重!

工程机械是装备工业的重要组成部分,而作为工程机械最重要的产品体系之一的起重装备,在日新月异的城市化发展进程中,以效率高、性能强、智能化等特点迅速占领市场的一席之地。 在国家双碳目标下,国内起重装备产业正在加快向大型化、…

做亚马逊多久可以赚钱?做亚马逊需要多少资金?——站斧浏览器

做亚马逊需要时间、资金和全面的市场策略。创业者需要有耐心和决心,同时也要灵活应对市场变化。那么做亚马逊多久可以赚钱,做亚马逊需要多少资金。 做亚马逊多久可以赚钱 首先,就像任何其他生意一样,做亚马逊需要时间和努力来建立起稳定的客…

VUE限制文件上传大小和上传格式

<el-form-item label"图片&#xff1a;" prop"tempImagePath"><el-uploadclass"upload"accept"image/jpeg":show-file-list"false"list-type"picture-card":headers"{ token: token}":action&…

【分享】前后端分离框架的相关内容有哪些?

在当前&#xff0c;低代码技术平台的灵活性、可视性、高效性等优势特点在职场办公中非常亮眼&#xff0c;成为众多企业提升办公效率和有效利用数据资源的重要工具。为了迎合市场需求&#xff0c;前后端分离也成为了发展趋势&#xff0c;如果大家想了解前后端分离框架的具体内容…

保姆级连接FusionInsight MRS kerberos Hive

数新网络&#xff0c;让每个人享受数据的价值https://xie.infoq.cn/link?targethttps%3A%2F%2Fwww.datacyber.com%2F 概述 本文将介绍在华为云 FusionInsight MRS&#xff08;Managed Relational Service&#xff09;的Kerberos环境中&#xff0c;如何使用Java和DBeaver实现远…

JOSEF约瑟 瓦斯继电器(又称气体继电器) QJ4-25 250V 0.3A

QJ4系列气体继电器 QJ4-25气体继电器 QJ4-25瓦斯继电器 QJ4-25TH气体继电器 QJ4-25TH瓦斯继电器 QJ4G-25气体继电器 QJ4G-25瓦斯继电器 QJ4G-25TH气体继电器 QJ4G-25TH瓦斯继电器 用途 QJ4-25气体继电器是油浸式有载分接开关所用的一种保护装置。(体继电器安装在变压器箱盖 与…