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

python 之 正则表达式模块re

文章目录

  • findall
      • 例子:
      • 特点和注意事项:
  • match
      • 示例:
      • `match` 对象的方法和属性:
      • 注意事项:
  • search
      • 示例:
      • `match` 对象的方法和属性:
      • 注意事项:
  • split
      • 示例:
      • 参数说明:
      • 注意事项:
      • 示例说明:
  • sub
      • 示例:
      • 参数说明:
      • 可选参数:
      • 示例说明:

在这里插入图片描述

正则表达式(Regular Expression,简称为 regex 或 regexp)是用于在文本中匹配模式的特殊字符串表达式。Python 中的 re 模块是用来处理正则表达式的工具,它提供了一种灵活、强大的方式来搜索、替换和操作文本数据。

findall

re.findall() 是 Python re 模块中一个常用的函数,用于在字符串中查找所有与给定正则表达式模式匹配的内容,并返回一个包含所有匹配项的列表。它的基本语法如下:

re.findall(pattern, string)
  • pattern 是一个正则表达式,用来描述你想要匹配的模式。
  • string 是你要搜索的目标字符串。

例子:

假设有一个文本包含多个 email 地址,我们想要提取出这些 email 地址:

import retext = "Email me at test@example.com or test2@example.com for more information."emails = re.findall(r'\S+@\S+', text)
print(emails)
  • \S+@\S+ 是一个简单的正则表达式模式,它匹配一个非空白字符序列,然后是 @ 符号,再后面跟着另一个非空白字符序列。这个模式描述了基本的 email 地址格式。

re.findall() 返回一个列表,其中包含在 text 中找到的所有与模式匹配的 email 地址。

特点和注意事项:

  1. 返回列表:re.findall() 返回所有匹配项组成的列表。
  2. 不返回匹配对象:与 re.search()re.match() 不同,findall() 不返回匹配对象,而是返回匹配的字符串本身。
  3. 模式中的分组:如果模式中有分组 ( )re.findall() 会返回元组的列表,每个元组包含匹配到的分组内容。
import retext = "John has 3 cats, Jane has 2 dogs."
matches = re.findall(r'(\d+)\s(\w+)', text)
print(matches)  # Output: [('3', 'cats'), ('2', 'dogs')]

这个例子中,正则表达式 (\d+)\s(\w+) 匹配了一些数字和接着的字母单词,并且使用了分组。re.findall() 返回了包含每个匹配组合的元组列表。

re.findall() 在处理文本、数据抽取、简单的文本匹配等任务中都非常有用,但要注意在处理复杂匹配模式时,可能需要更深入的了解和测试正则表达式。

match

re.match() 是 Python 中 re 模块的一个函数,用于在字符串的开头位置查找是否有符合给定正则表达式模式的内容。这个函数尝试从字符串的起始位置开始匹配模式,如果找到匹配,它将返回一个匹配对象;如果没有找到匹配,则返回 None

这是 re.match() 函数的基本语法:

re.match(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • string 是要搜索的目标字符串。

示例:

假设我们想要验证一个字符串是否以 “Hello” 开头:

import retext = "Hello, how are you?"
match = re.match(r'Hello', text)if match:print("Pattern found:", match.group())
else:print("Pattern not found.")

在这个例子中,re.match() 尝试从字符串的开头匹配模式 “Hello”。如果找到匹配,它会返回一个匹配对象,否则返回 None

match 对象的方法和属性:

  • group(): 返回与整个匹配的字符串。
  • start(): 返回匹配的起始位置。
  • end(): 返回匹配的结束位置。
  • span(): 返回一个元组,包含匹配 (开始, 结束) 的位置。
import retext = "Hello, how are you?"
match = re.match(r'Hello', text)if match:print("Matched string:", match.group())print("Start position:", match.start())print("End position:", match.end())print("Position span:", match.span())

注意事项:

  1. re.match() 只在字符串的开头位置进行匹配。如果你想要在整个字符串中查找匹配,可以使用 re.search()
  2. 如果匹配成功,re.match() 返回的是一个匹配对象,你可以使用它的方法来获取匹配结果,如 group()start() 等。
  3. 如果没有找到匹配,re.match() 将返回 None

re.match() 对于需要精确匹配字符串开头的情况非常有用,但如果你需要在字符串中间或结尾位置进行匹配,可以考虑使用 re.search() 函数。

search

re.search() 是 Python 中 re 模块的函数之一,用于在给定的字符串中搜索匹配指定正则表达式模式的内容。与 re.match() 不同,re.search() 不仅仅在字符串的开头进行匹配,而是搜索整个字符串,找到第一个匹配项后便停止搜索,并返回一个匹配对象。

这是 re.search() 函数的基本语法:

re.search(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • string 是要搜索的目标字符串。

示例:

假设我们想要在一个字符串中找到数字的位置:

import retext = "The price is $25.50."
match = re.search(r'\d+', text)if match:print("Pattern found:", match.group())print("Start position:", match.start())print("End position:", match.end())print("Position span:", match.span())
else:print("Pattern not found.")

在这个例子中,re.search() 在给定的字符串中搜索数字 \d+ 的模式。如果找到匹配,它将返回一个匹配对象,否则返回 None

match 对象的方法和属性:

  • group(): 返回与整个匹配的字符串。
  • start(): 返回匹配的起始位置。
  • end(): 返回匹配的结束位置。
  • span(): 返回一个元组,包含匹配 (开始, 结束) 的位置。

注意事项:

  1. re.search() 会在整个字符串中查找第一个匹配项。如果需要查找所有匹配项,可以使用 re.findall()
  2. 如果找到匹配,re.search() 返回的是一个匹配对象,你可以使用它的方法来获取匹配结果,如 group()start() 等。
  3. 如果没有找到匹配,re.search() 将返回 None

re.search() 在需要在字符串中查找第一个匹配项时非常有用,尤其是当你不确定匹配项出现在字符串的什么位置时。

split

re.split() 是 Python re 模块中的一个函数,用于根据正则表达式模式分割字符串。它的作用类似于 str.split() 方法,但不是根据固定的字符分割字符串,而是根据给定的正则表达式模式进行分割。

这是 re.split() 函数的基本语法:

re.split(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要作为分隔符的模式。
  • string 是要分割的目标字符串。

示例:

假设我们有一个句子,想要根据空格和标点符号分割它:

import retext = "Hello, how are you?"
tokens = re.split(r'\W+', text)
print(tokens)

在这个例子中,re.split() 根据模式 \W+(非字母数字下划线的字符)对文本进行分割。它返回一个由分割后的子字符串组成的列表。

参数说明:

  • pattern 定义了分隔符的模式。可以是单个字符,也可以是更复杂的正则表达式。
  • string 是要分割的目标字符串。

注意事项:

  1. 如果模式中有括号,那么括号内的内容也会被包含在结果列表中。
  2. 如果模式中使用了捕获分组,那么分隔符也会包含在结果列表中。
  3. re.split() 不会在最后的空字符串位置进行分割,因此不会返回末尾的空字符串。

示例说明:

import retext = "apple, orange, , banana, , mango"
tokens = re.split(r',\s*', text)
print(tokens)

这个例子中,模式 ,\\s* 匹配逗号后面的零个或多个空格。re.split() 根据这个模式分割字符串,并返回一个由分割后的子字符串组成的列表。结果列表中不包含末尾的空字符串。

re.split() 是一个很有用的函数,特别适用于需要根据复杂模式进行字符串分割的情况。

sub

re.sub() 是 Python 中 re 模块的一个函数,用于在字符串中查找与给定正则表达式模式匹配的内容,并将其替换为指定的字符串。它允许你执行在文本中查找并替换特定模式的操作。

这是 re.sub() 函数的基本语法:

re.sub(pattern, replacement, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • replacement 是要替换匹配内容的字符串。
  • string 是要在其中进行替换操作的目标字符串。

示例:

假设我们想要在文本中替换所有数字为字符串 “NUMBER”:

import retext = "I have 2 apples and 3 oranges."
new_text = re.sub(r'\d+', 'NUMBER', text)
print(new_text)

在这个例子中,re.sub() 将查找文本中的所有数字,并用字符串 “NUMBER” 替换它们。

参数说明:

  • pattern 定义了要查找和替换的模式。这可以是简单的字符,也可以是更复杂的正则表达式。
  • replacement 是要替换匹配内容的字符串。
  • string 是要在其中进行替换操作的目标字符串。

可选参数:

re.sub() 函数还包含两个可选参数:

  • count: 指定替换的最大次数。默认是 0,表示所有匹配都会被替换。
  • flags: 匹配模式。例如,re.IGNORECASE 可以用来进行不区分大小写的匹配。

示例说明:

import retext = "The color of the sky is blue."
new_text = re.sub(r'blue', 'red', text)
print(new_text)

在这个例子中,re.sub() 将找到文本中的 “blue” 并用 “red” 进行替换。

re.sub() 函数是处理文本替换非常有用的工具。它可以用于简单的字符串替换,也可以使用更复杂的正则表达式模式进行高级替换操作。

相关文章:

python 之 正则表达式模块re

文章目录 findall例子:特点和注意事项: match示例:match 对象的方法和属性:注意事项: search示例:match 对象的方法和属性:注意事项: split示例:参数说明:注意…...

vue项目npm install报错解决

一、报错信息 node-sass4.14.1 postinstall: node scripts/build.js 二、解决方式 (1)删除未成功安装的 node_modules 文件; (2)为 node-sass 单独设置镜像源; npm config set sass_binary_sitehttps:/…...

ubuntu挂载共享目录的方法

ubuntu挂载共享目录的方法 安装NFS配置NFS 安装NFS sudo apt-get install nfs-kernel-server配置NFS 创建work共享目录:(本人将此文件放在桌面)sudo mkdir worksudo gedit /etc/exports添加: /home/zynq/Desktop/work *(rw,sync,no_root_squash,no_subtree_check)运行以下命…...

累计概率分布、概率分布函数(概率质量函数、概率密度函数)、度量空间、负采样(Negative Sampling)

这里写自定义目录标题 机器学习的基础知识累计概率分布概率分布函数度量空间负采样(Negative Sampling)基于分布的负采样(Distribution-based Negative Sampling):基于近邻的负采样(Neighbor-based Negativ…...

〔001〕虚幻 UE5 安装教程

✨ 目录 🎈 下载启动程序🎈 注册个人账户🎈 选择引擎版本🎈 选择安装选项🎈 虚幻商城的使用🎈 每月免费插件🎈 安装插件🎈 下载启动程序 下载地址:https://www.unrealengine.com/zh-CN/download点击上面地址,下载 UE5 启动程序并安装🎈 注册个人账户 打开商…...

Crypto(8) BUUCTF-bbbbbbrsa1

题目描述: from base64 import b64encode as b32encode from gmpy2 import invert,gcd,iroot from Crypto.Util.number import * from binascii import a2b_hex,b2a_hex import randomflag "******************************"nbit 128p getPrime(nbit)…...

软件测试之随机测试详解

在软件测试中除了根据测试用例和测试说明书进行功能测试外,还需要进行随机测试,随机测试是没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行测试用例的重要…...

【广州华锐互动】3D全景虚拟旅游在文旅行业的应用场景

随着科技的不断发展,3D全景虚拟旅游正在成为一种新兴的旅游体验方式,它可以帮助旅游者更加深入地了解旅游信息,提升旅游体验。下面我们将详细介绍3D全景虚拟旅游可以应用于哪些场景。 一、旅游规划 3D全景虚拟旅游可以帮助旅游者更加直观地进…...

多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉 计算机竞赛

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 …...

深入了解Jedis:Java操作Redis的常见类型数据存储

目录 前言 一、Jedis介绍 1.Jedis在各方面的功能 2.特点 二、Java连接Redis 1.导入pom依赖 2.建立连接 三、Java操作Redis的常见类型数据存储 1.字符串 2.哈希表 3.列表 4.集合 5.有序集合 四、Redis的实际应用场景实例 1.会议信息实体 2.自定义注解 3.创建切面…...

angular+ionic+npm项目运行

angularionicnpm项目运行 错误记录(1)Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/win32-x64-72_binding.node(2)The npm warning "A requires a peer of B but none is installe…...

【数据库】数据库模式 Schema

数据库模式 Schema 1.MySQL2.PostgreSQL3.SQL Server4.Oracle5.SQLite 在数据库的术语中,模式(schema)是一个逻辑概念,用于组织数据库中的对象。模式中的对象通常包括 表、索引、数据类型、序列、视图、存储过程、主键、外键 等等…...

RPC 原理详解

文章目录 什么是 RPCRPC 基本原理RPC核心功能服务寻址数据编解码网络传输一次RPC的调用过程 实践基于HTTP协议的RPC基于TCP协议的RPC 什么是 RPC RPC(Remote Procedure Call),即远程过程调用,它允许像调用本地服务一样调用远程服…...

新版Helix QAC 100%覆盖MISRA C++:2023

Helix QAC 2023.3预期将100%覆盖在2023年第四季度发布的新的MISRA C:2023规则。 此外,该版本支持更多的C20语言特性,并改进了Perforce Validate平台和Helix QAC与Validate的集成,以及其他质量改进。 编码标准覆盖率(MISRA C:202…...

maven 项目添加 git-hook 脚本,约束提交内容格式

git 提交代码&#xff0c;推送代码&#xff0c;可以通过在 .git/hooks 目录中的 bash 脚本来做一定的验证工作。 本例使用插件 maven-antrun-plugin 自动输出脚本至 .git/hooks 目录中&#xff0c;在 pom.xml 中的使用示例如下&#xff1a; <plugin><groupId>org.…...

18、Flink的SQL 支持的操作和语法

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

泛微OA_lang2sql 任意文件上传漏洞复现

简介 泛微OA E-mobile系统 lang2sql接口存在任意文件上传漏洞&#xff0c;由于后端源码中没有对文件没有校验&#xff0c;导致任意文件上传。攻击者可利用该参数构造恶意数据包进行上传漏洞攻击。 漏洞复现 FOFA语法&#xff1a; title"移动管理平台-企业管理" 页…...

Rust编程基础核心之所有权(上)

1.什么是所有权? Rust 的核心功能&#xff08;之一&#xff09;是 所有权&#xff08;ownership&#xff09;。虽然该功能很容易解释&#xff0c;但它对语言的其他部分有着深刻的影响。 所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制&#x…...

优化改进YOLOv5算法之添加DCNv3模块,有效提升目标检测效果

目录 前言 1 DCNv3原理 1.1 DCNv2 1.2 DCNv3 1.3 模型架构 2 YOLOv5算法中加入DCNv3模块...

VSCode 连接不上 debian 的问题

之前一台笔记本上安装了 debian12&#xff0c;当时用 vscode 是可以连接上的&#xff0c;但今天连接突然就失败了&#xff0c;失败信息是这样的&#xff1a; 查看失败信息 因为 debian 是自动获取 ip 地址的&#xff0c;以前能连接上时&#xff0c;ip 地址是 104&#xff0c;然…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...