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

news2024/12/24 10:07:32

文章目录

  • 模块介绍
    • 正则表达式中的特殊字符
  • 常用函数
    • - 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() 对于需要多次使用相同正则表达式的场景有性能优势。

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

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

相关文章

数据分析思维(五):分析方法——假设检验分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…

解读DiffusionNER: Boundary Diffusion for Named Entity Recognition

content 摘要1. 图1图21. 上方:扩散过程与实体边界2. 下方:网络结构(Sentence Encoder Entity Decoder)3. 关键思想小结 摘要 主要内容分为四个部分: 模型定位与基本原理: 提出了DiffusionNER模型将命名…

【QSS样式表 - ⑥】:QPushButton控件样式

文章目录 QPushBUtton控件样式QSS示例 QPushBUtton控件样式 常用子控件 常用伪状态 QSS示例 代码: QPushButton {background-color: #99B5D1;color: white;font-weigth: bold;border-radius: 20px; }QPushButton:hover {background-color: red; }QPushButton:p…

数字经济下的 AR 眼镜

目录 1. 📂 AR 眼镜发展历史 1.1 AR 眼镜相关概念 1.2 市面主流 XR 眼镜 1.3 AR 眼镜大事记 1.4 国内外 XR 眼镜 1.5 国内 AR 眼镜四小龙 2. 🔱 关键技术 2.1 AR 眼镜近眼显示原理 2.2 AR 眼镜关键技术 2.3 AR 眼镜技术难点 3. &#x1f4a…

smb和nfs双栈协议共享目录

1 简介 NFS和SAMBA协议都是文件共享,Linux客户端常用于NFS协议访问远程共享目录,Windows客户端常用于SAMBA协议访问远程共享目录。 2 环境 合计使用三台服务器,服务器都位于同一个子网(10.0.0.0/19)、同一个安全组…

Day13 用Excel表体验梯度下降法

Day13 用Excel表体验梯度下降法 用所学公式创建Excel表 用Excel表体验梯度下降法 详见本Day文章顶部附带资源里的Excel表《梯度下降法》,可以对照表里的单元格公式进行理解,还可以多尝试几次不同的学习率 η \eta η来感受,只需要更改学习率…

Python获取系统负载并打印折线图

#! /opt/py36/bin/python import psutil import matplotlib.pyplot as plt import time# 创建一个空列表,用于存储负载数据 load_data []# 循环收集负载数据 while True:# 获取当前系统负载load_avg psutil.getloadavg()# 将平均负载添加到load_data列表中load_da…

RCE 命令执行漏洞 过滤模式 基本的过滤问题 联合ctf题目进行实践

前言 知道RCE 命令执行分为 代码执行 和 命令执行 原理 : 就是用户的输入被当做命令或者代码执行了 从而造成了危害 代码执行 除了eval php代码执行漏洞的函数还有 eval()、a ssert()、 preg_replace()、 create_function()、 array_map()、 call_user_func(…

Leetcode打卡:考场就坐

执行结果:通过 题目: 855 考场就坐 在考场里,有 n 个座位排成一行,编号为 0 到 n - 1。 当学生进入考场后,他必须坐在离最近的人最远的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外&am…

数据结构(哈希表(上)纯概念版)

前言 在软件开发和计算机科学中,数据结构的选择直接影响到程序的性能和效率。不同的数据结构适用于不同的场景,合理地选择合适的数据结构是高效编程的关键之一。哈希表(哈希表(Hash Table)作为一种高效的键值对存储结…

【机器学习与数据挖掘实战】案例06:基于Apriori算法的餐饮企业菜品关联分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

深入解析 Spring WebFlux:原理与应用

优质博文:IT-BLOG-CN WebFlux 是 Spring Framework 5 引入的一种响应式编程框架,和Spring MVC同级,旨在处理高并发和低延迟的非阻塞应用。这是一个支持反应式编程模型的新Web框架体系。 顺便一提,Spring Cloud Gateway在实现上是…

C语言基础——指针(4)

一. 字符指针变量 字符指针变量的使用和整型指针变量的使用方法相似,以下是其基本使用方法的例子: (1)字符指针变量还有一种使用方法: const char* p "abcd" 需…

『 Linux 』高级IO (一)

文章目录 内容回顾及铺垫五种IO模型不同类型IO的区别非阻塞IOfcntl( ) 多路转接 - select( )select( ) 的基本使用 - SelectServer服务器 内容回顾及铺垫 在博客『 Linux 』基础IO/文件IO (万字)中介绍了对IO的认识; IO实际上为Input/Output,输入输出; 以网络协议栈的视角来看,…

Spark-Streaming集成Kafka

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

「下载」智慧城市包括哪些方面:大数据公共服务平台、城市运行指挥中心、城市综合治理平台、城市体检综合运营平台解决方案

在当今信息化高速发展的时代,智慧城市已成为全球城市发展的新趋势。系列全面而创新的智慧城市解决方案,旨在助力城市实现智慧化转型,提升城市管理效率,增强市民生活质量。 智慧城市最新解决方案,标准规范顶层设计指南、…

ChatGPT生成接口文档实践案例(二)

不难发现,两个方案都出色地完成了接口文档的生成,但笔者更喜欢Response 2的表达,因为其描述更加全面。 还可以让ChatGPT生成符合OpenAPI 3.0规范的接口文档,以便于项目相关成员阅读,如图5-13所示。 为什么要生成OpenAP…

【解决】Linux更新系统内核后Nvidia-smi has failed...

问题概述 由于服务器(操作系统为 RedHat 9)宕机,重启后,系统内核自动更新了,然后输入 nvidia-smi 发现报了下面的异常: NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the late…

Docker Compose 安装 Harbor

我使用的系统是rocky Linux 9 1. 准备环境 确保你的系统已经安装了以下工具: DockerDocker ComposeOpenSSL(用于生成证书)#如果不需要通过https连接的可以不设置 1.1 安装 Docker 如果尚未安装 Docker,可以参考以下命令安装&…

PCIe_Host驱动分析_设备枚举

往期内容 本文章相关专栏往期内容,PCI/PCIe子系统专栏: 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…