Python 标准库:re——正则表达式操作

文章目录

  • 模块介绍
    • 正则表达式中的特殊字符
  • 常用函数
    • - escape()
    • - template()
    • - search()
    • - sub()
    • - subn()
    • - match()
    • - findall()
    • - finditer()
    • - split()
    • - fullmatch()
    • - purge()
    • - compile()


模块介绍

re 模块提供了正则表达式的支持,允许我们通过模式匹配来进行字符串的搜索、替换和分割等操作。正则表达式是一个强大的工具,广泛应用于文本处理、数据提取等领域。以下是 re 模块的详解及示例,帮助你理解常见的正则表达式操作。

正则表达式中的特殊字符

正则表达式符号描述
.匹配任何单个字符(除换行符外)。
^匹配字符串的开始。
$匹配字符串的结束。
[]匹配方括号中的任何字符。例如,[a-z] 匹配任何小写字母。
*匹配前一个字符零次或多次。
+匹配前一个字符一次或多次。
?匹配前一个字符零次或一次。
{m,n}匹配前一个字符至少 m 次,但不超过 n 次。
|或运算符,匹配多个模式中的任意一个。
()分组,用于将多个字符组成一个单元。

常用函数

函数描述
escape()转义字符串中的所有特殊字符
search()在字符串中查找第一个匹配的子串
sub()替换字符串中匹配正则表达式的部分
subn()替换并返回替换后的字符串和替换次数
match()从字符串开始位置匹配正则表达式
findall()返回所有匹配的子串列表
finditer()返回一个迭代器,包含所有匹配对象
split()根据正则表达式分割字符串
fullmatch()判断整个字符串是否完全匹配正则表达式
purge()清空正则表达式的内部缓存
compile()编译正则表达式,返回一个 Pattern 对象

- escape()

用于对字符串中的所有非字面字符(如 ., *, ? 等)进行转义,返回一个只包含字面字符的正则表达式。

import re

text = "3+2=5"

escaped_text = re.escape(text)
print(escaped_text)  # 输出:3\+2\=5

这里,+ 和 = 会被转义为 + 和 =,使它们在正则表达式中作为字面字符处理。

- template()

用于处理模板字符串的替换,常用于字符串格式化时的匹配与替换。这个方法通常不常用,更多使用 str.format() 或 f-string。

- search()

扫描整个字符串,返回第一个匹配的子串。返回一个匹配对象(Match),如果没有匹配到,返回 None。

import re

text = "The rain in Spain falls mainly on the plain."
match = re.search(r"rain", text)

if match:
    print("Found:", match.group())  # 输出 Found: rain

  • match.group() 获取匹配的字符串。

- sub()

用于替换字符串中匹配正则表达式的部分,返回替换后的字符串。

import re

text = "The rain in Spain falls mainly on the plain."
new_text = re.sub(r"rain", "sun", text)

print(new_text)  # 输出 The sun in Spain falls mainly on the plain.

  • 该方法将正则表达式匹配到的部分替换为指定的字符串。

- subn()

subn() 与 sub() 类似,都是进行正则替换。区别是 subn() 会返回一个包含两个元素的元组,第一个是替换后的字符串,第二个是替换的次数。

import re

text = "The rain in Spain falls mainly on the plain."
new_text, count = re.subn(r"rain", "sun", text)

print(new_text)  # 输出 The sun in Spain falls mainly on the plain.
print(count)     # 输出 1

  • 这里 count 表示进行了多少次替换。

- match()

尝试从字符串的开头匹配正则表达式。如果开头匹配成功,返回一个匹配对象;否则返回 None。

import re

text = "Hello World"
match = re.match(r"Hello", text)

if match:
    print("Matched:", match.group())  # 输出 Matched: Hello

  • 该方法只会从字符串的起始位置进行匹配,如果正则表达式不从字符串开头开始匹配,返回 None。

- findall()

返回所有匹配正则表达式的子串,并将其以列表的形式返回。每个匹配的结果是一个字符串。

import re

text = "abc 123 def 456 ghi 789"
matches = re.findall(r"\d+", text)

print(matches)  # 输出 ['123', '456', '789']

  • 该方法会返回所有匹配的子串。

- finditer()

finditer() 与 findall() 类似,都是返回匹配的结果。但不同之处在于,它返回一个迭代器,每次迭代返回一个 Match 对象,可以进一步通过 group() 获取匹配的文本。

import re

text = "abc 123 def 456 ghi 789"
matches = re.finditer(r"\d+", text)

for match in matches:
    print(match.group())  # 输出 123 456 789

  • finditer() 返回的每个匹配项是一个 Match 对象,你可以获取匹配的具体信息(例如匹配的位置、匹配的内容等)。

- split()

按照正则表达式的匹配规则将字符串分割成多个子串,并返回一个列表。

import re

text = "apple,orange,banana,grape"
result = re.split(r",", text)

print(result)  # 输出 ['apple', 'orange', 'banana', 'grape']

  • 该方法将字符串按匹配到的正则表达式分割。

- fullmatch()

用于判断整个字符串是否完全匹配正则表达式。如果整个字符串都符合模式,返回一个匹配对象;否则返回 None。

import re

text = "123abc"
match = re.fullmatch(r"\d+[a-z]+", text)

if match:
    print("Full match:", match.group())  # 输出 Full match: 123abc
else:
    print("No match")

  • 只有字符串完全符合正则表达式的模式时,才会返回匹配对象。

- purge()

清空正则表达式的内部缓存。这通常不需要手动调用,Python 会自动管理缓存。

import re

# 清除缓存
re.purge()

  • 主要用于清理 re.compile() 编译后的缓存,但通常不需要在普通程序中使用。

- compile()

编译一个正则表达式模板,返回一个 Pattern 对象。编译后的模式可以多次复用,从而提高效率,特别是在多个匹配操作时。

import re

# 编译正则表达式
pattern = re.compile(r"\d+")

# 使用编译后的模式进行匹配
matches = pattern.findall("123 abc 456 def 789")
print(matches)  # 输出 ['123', '456', '789']

  • compile() 对于需要多次使用相同正则表达式的场景有性能优势。

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

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

相关文章

【落羽的落羽 C语言篇】自定义类型——结构体

文章目录 一、结构体1. 结构体类型的概念和声明2. 结构体变量的创建和初始化3. 结构体成员的访问3.1 直接访问3.2 间接访问 4. 结构体的内存对齐4.1 内存对齐的规则4.2 内存对齐的原因4.3 修改默认对齐数 5. 结构体传参6. 结构体实现位段 在C语言中,已经提供了一些基…

CSS盒子模型(溢出隐藏,块级元素和行级元素的居中对齐,元素样式重置)

overflow:值 规定了内容溢出元素框时所发生的事情 visible:内容不会被修剪,会显示在元素框之外,默认值 overflow: visible; hidden:内容会被修剪,溢出内容不可见 overflow: hidden; scroll:内…

Spark-Streaming集成Kafka

Spark Streaming集成Kafka是生产上最多的方式,其中集成Kafka 0.10是较为简单的,即:Kafka分区和Spark分区之间是1:1的对应关系,以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整,下面我们…

【Python】pandas库---数据分析

大学毕业那年,你成了社会底层群众里,受教育程度最高的一批人。 前言 这是我自己学习Python的第四篇博客总结。后期我会继续把Python学习笔记开源至博客上。 上一期笔记有关Python的NumPy数据分析,没看过的同学可以去看看:【Pyt…

数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?

TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…

LiteFlow决策系统的策略模式,顺序、最坏、投票、权重

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 想必大家都有听过或做过职业和性格测试吧,尤其是现在的毕业生,在投了简历之后经…

YashanDB 23.2 YAC -单库多实例架构多活共享集群安装部署指南

一、概述 1.1 文档目标 ​ 本说明旨在指导技术人员在 CentOS 7 x86_64 操作系统上完成崖山数据库企业版 23.2 的共享集群安装与部署。通过系统架构、集群拓扑及部署需求的精确描述,帮助读者在开始安装前对崖山数据库的架构形成清晰认识。本文以高效、稳定、安全为…

某科技局国产服务器PVE虚拟化技术文档

环境介绍 硬件配置 服务器品牌:黄河 型号:Huanghe 2280 V2 Cpu型号:kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡:板载四口千兆 如下表 四台服务器同等型号配置,均做单节点虚拟化,数据保护采用底层r…

Gin-vue-admin(4):项目创建前端一级页面和二级页面

目录 创建一级页面创建二级页面 创建一级页面 view目录下新建一个my&#xff0c;Index.vue <template></template><script> export default {name:My, } </script><script setup> import {ref} from vue const myNameref("name") &…

Ubuntu下的tcl/tk编程快速入门

一、Tcl/Tk 简介 接口介绍 https://www.tutorialspoint.com/tcl-tk/tcl_tk_quick_guide.htm GUI Canvas接口 https://www.tutorialspoint.com/tcl-tk/tk_canvas_widgets.htm tcl语言 https://www.tcl-lang.org/ 官方教程 https://www.tcl.tk/man/tcl8.5/tutorial/tcltutoria…

数字化审计咨询服务,企业转型数字化审计的必要条件

人工智能、云计算、大数据、物联网等新兴技术的快速发展&#xff0c;为企业的数字化转型提供了强大的技术支持。这些技术逐渐被应用到企业运营管理的方方面面&#xff0c;推动了企业内部审计工作的变革。随着数字化转型的深化和信息技术的不断发展&#xff0c;数字化审计将成为…

【QT常用技术讲解】发送POST包(两种方式:阻塞方式及非阻塞方式)

前言 http/https(应用层)协议是广泛使用的网络通信协议。在很多与第三方API对接的场景中&#xff0c;通常是通过http/https协议完成&#xff0c;比如API对接时&#xff0c;通常要通过POST包获取access_token进行鉴权&#xff0c;然后再进行数据交互&#xff08;本篇也包含有对接…

重撸设计模式--代理模式

文章目录 定义UML图代理模式主要有以下几种常见类型&#xff1a;代理模式涉及的主要角色有&#xff1a;C 代码示例 定义 代理模式&#xff08;Proxy Pattern&#xff09;属于结构型设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。 通过引入代理对象&am…

【Steel Code】 10.5 COMPOSITE COLUMNS

10.5 COMPOSITE COLUMNS 组合柱 10.5.1 General 总则 (1) This clause applies for the design of composite columns and composite compression members with fully encased H sections, partially encased H sections, and infilled rectangular and circular hollow sect…

11.vector的介绍及模拟实现

1.vector的介绍 记得之前我们用C语言实现过顺序表&#xff0c;vector本质上也是顺序表&#xff0c;一个能够动态增长的数组。 vector 的底层实现机制 - 动态数组&#xff1a;vector 的底层实现是动态数组。它在内存中连续存储元素&#xff0c;就像一个可以自动调整大小的数…

封装(2)

大家好&#xff0c;今天我们来介绍一下包的概念&#xff0c;知道包的作用可以更好的面对今后的开发&#xff0c;那么我们就来看看包是什么东西吧。 6.3封装扩展之包 6.3.1包的概念 在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组…

go官方日志库带色彩格式化

go默认的 log 输出的日志样式比较难看&#xff0c;所以通过以下方式进行了美化和格式化&#xff0c;而且加入了 unicode 的ascii码&#xff0c;进行色彩渲染。 package mainimport ("fmt""log""os""runtime""strings""…

0基础学前端系列 -- 深入理解 HTML 布局

在现代网页设计中&#xff0c;布局是至关重要的一环。良好的布局不仅能提升用户体验&#xff0c;还能使内容更具可读性和美观性。HTML&#xff08;超文本标记语言&#xff09;结合 CSS&#xff08;层叠样式表&#xff09;为我们提供了多种布局方式。本文将详细介绍流式布局、Fl…

Windows开启IIS后依然出现http error 503.the service is unavailable

问题背景 已启用IIS服务&#xff0c;配置步骤可以参考Windows10 IIS Web服务器安装配置 问题描述 在这一步浏览网站时&#xff0c;并没有出现默认首页&#xff0c;而是 http error 503 the service is unavailable 问题解决 参考 成功解决http error 503.the service is un…

BuildCTF 公开赛web部分wp

文章目录 LovePopChainRedFlagWhy_so_serials?babyuploadeazyl0ginez!httpez_md5find-the-idsubtflock刮刮乐我写的网站被rce了&#xff1f; LovePopChain payload: <?php class MyObject{public $NoLove"Do_You_Want_Fl4g?";public $Forgzy;public functi…