了解`re`模块的`split()`, `sub()`, `subn()`方法的作用
在Python中,re
模块(即正则表达式模块)提供了强大的字符串处理能力,允许你通过模式匹配来执行复杂的文本搜索、替换和分割等操作。其中,split()
, sub()
, 和 subn()
方法是re
模块中非常实用的几个函数,它们各自在字符串处理中扮演着重要的角色。下面,我将详细解释这三个方法的作用、用法、以及它们在实际应用中的例子。
1. split()
方法
作用
split()
方法用于根据正则表达式匹配的结果来分割字符串。它类似于字符串的内置 split()
方法,但提供了更强大的分割能力,因为你可以指定一个正则表达式作为分隔符,而不仅仅是单个字符或简单的字符串。
语法
re.split(pattern, string, maxsplit=0, flags=0) |
- pattern:正则表达式模式。
- string:需要被分割的字符串。
- maxsplit:分割次数,默认为0,表示分割所有匹配项。如果非零,则最多分割
maxsplit
次。 - flags:正则表达式标志位,用于控制正则表达式的匹配方式,如忽略大小写、多行匹配等。
返回值
返回一个列表,包含所有被分隔符分割后的子字符串。
示例
import re | |
# 使用普通字符作为分隔符 | |
text = "one1two2three3four" | |
print(re.split('\d+', text)) # 输出: ['one', 'two', 'three', 'four'] | |
# 使用正则表达式作为分隔符,忽略大小写 | |
text = "One, Two, Three, Four" | |
print(re.split(r',\s*', text, flags=re.IGNORECASE)) # 输出: ['One', 'Two', 'Three', 'Four'] | |
# 使用正则表达式分割,并限制分割次数 | |
text = "one1two2three3four" | |
print(re.split('\d+', text, maxsplit=1)) # 输出: ['one', 'two2three3four'] |
应用场景
- 文本数据清洗:在处理文本数据时,经常需要根据特定的模式(如标点符号、数字序列等)来分割字符串,以便于后续处理。
- 日志分析:在解析日志文件时,可以根据日志项之间的分隔符(如逗号、分号等)将日志分割成多个字段,以便进行进一步的分析。
- 文件路径解析:在处理文件路径时,可以使用
split()
方法根据目录分隔符(如Windows的\
或Unix/Linux的/
)来分割路径,从而获取路径的各个组成部分。
2. sub()
方法
作用
sub()
方法用于替换字符串中所有与正则表达式匹配的部分。它允许你指定一个替换字符串或一个函数,该函数将用于生成每个匹配项的替换字符串。
语法
re.sub(pattern, repl, string, count=0, flags=0) |
- pattern:正则表达式模式。
- repl:替换字符串或函数。如果是一个字符串,则所有匹配项都将被该字符串替换。如果是一个函数,则该函数将对每个匹配项进行调用,并返回替换字符串。
- string:需要被替换的原始字符串。
- count:替换次数,默认为0,表示替换所有匹配项。如果非零,则最多替换
count
次。 - flags:正则表达式标志位。
返回值
返回替换后的字符串。
示例
import re | |
# 使用字符串作为替换内容 | |
text = "apples are round, and apples are juicy." | |
print(re.sub(r'\bapples\b', 'oranges', text)) # 输出: oranges are round, and oranges are juicy. | |
# 使用函数作为替换内容 | |
def replace_func(match): | |
word = match.group() | |
if word.islower(): | |
return word.upper() | |
else: | |
return word.lower() | |
text = "Hello World, hello python." | |
print(re.sub(r'\b\w+\b', replace_func, text)) # 输出: hELLO wORLD, HELLO PYTHON. |
应用场景
- 文本内容替换:在编辑文本文件或处理用户输入时,经常需要根据特定的模式来替换字符串中的某些部分。
- 数据清洗:在数据预处理阶段,可能需要删除或替换字符串中的敏感信息、无用字符或格式错误的数据。
- 格式化输出:在生成报告或日志时,可能需要将文本中的某些部分替换为更易于阅读或符合特定格式的字符串。
3. subn()
方法
作用
subn()
方法的作用与sub()
方法类似,都是用于替换字符串中所有与正则表达式匹配的部分。不同之处在于,subn()
方法还会返回一个元组,其中包含替换后的字符串和一个表示替换次数的整数。
语法
re.subn(pattern, repl, string, count=0, flags=0) |
参数与sub()
方法相同。
返回值
返回一个元组(new_string, num_subs)
,其中new_string
是替换后的字符串,num_subs
是替换次数。
示例
import re | |
text = "apples are round, and apples are juicy." | |
new_text, num_subs = re.subn(r'\bapples\b', 'oranges', text) | |
print(new_text) # 输出: oranges are round, and oranges are juicy. | |
print(num_subs) # 输出: 2 |
应用场景
subn()
方法的应用场景与sub()
方法类似,但当你需要知道实际进行了多少次替换时,subn()
方法就显得特别有用。例如,在编辑文本文件时,你可能需要记录替换了多少个特定的单词或短语,以便在后续处理中使用这些信息。
总结
re
模块的split()
, sub()
, 和 subn()
方法是Python中处理字符串的强大工具。它们通过正则表达式提供了灵活的字符串分割、替换和计数功能。在实际应用中,这些方法可以用于文本数据清洗、日志分析、文件路径解析、文本内容替换等多种场景。通过合理使用这些方法,可以大大提高字符串处理的效率和准确性。同时,由于正则表达式本身的强大功能,这些方法也支持复杂的匹配和替换逻辑,使得Python在处理文本数据方面更加灵活和强大。
相关文章:
了解`re`模块的`split()`, `sub()`, `subn()`方法的作用
在Python中,re模块(即正则表达式模块)提供了强大的字符串处理能力,允许你通过模式匹配来执行复杂的文本搜索、替换和分割等操作。其中,split(), sub(), 和 subn() 方法是re模块中非常实用的几个函数,它们各…...
机器学习交通流量预测实现方案
机器学习交通流量预测实现方案 实现方案 1. 数据预处理 2. 模型选择 3. 模型训练与评估 代码实现 代码解释 小结 🎈边走、边悟🎈迟早会好 交通流量预测是机器学习在智能交通系统中的典型应用,通常用于预测道路上的车辆流量、速度和拥…...

QNN:基于QNN+example重构之后的yolov8det部署
QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高…...

Redis实战宝典:开发规范与最佳实践
目录标题 Key命名设计:可读性、可管理性、简介性Value设计:拒绝大key控制Key的生命周期:设定过期时间时间复杂度为O(n)的命令需要注意N的数量禁用命令:KEYS、FLUSHDB、FLUSHALL等不推荐使用事务删除大key设置合理的内存淘汰策略使…...
RPC的实现原理架构
RPC(Remote Procedure Call,远程过程调用)是一种允许程序调用位于不同地址空间或网络上的函数或方法的技术,尽管这些调用看起来像是本地调用。RPC 的实现极大地简化了分布式系统中的通信,避免了开发人员直接处理底层网…...
OpenXR Monado Hello_xr提交Frame
OpenXR Monado Hello_xr提交Frame @src/tests/hello_xr/openxr_program.cpp RenderFrame())xrWaitFrame(m_session, &frameWaitInfo, &frameState)xrBeginFrame(m_session, &frameBeginInfo)std::vector<XrCompositionLayerBaseHeader*> layers;std::vecto…...

huggingface快速下载模型及其配置
大家知道,每次进huggingface里面一个个手动下载文件然后再上传到我们的服务器是很麻烦的。其实huggingface提供了下载整个包的命令,很简单,如下: 1. 进入huggingface官网,随便搜索一个模型,点击右上角的三…...

虚幻5|不同骨骼受到不同伤害|小知识(2)
1.蓝图创建一个结构,B_BoneDamage 结构里添加一个浮点变量,表示伤害倍数 2.当我们创建了一个结构,就需要创建一个数据表格,数据表格可以选择对应的结构 不同骨骼不同倍数伤害,骨骼要对应骨骼网格体的名称 3.把我们br…...

达梦SQL 优化简介
目录 一、定位慢 SQL (一)开启跟踪日志记录 1.跟踪日志记录配置 (二)通过系统视图查看 1.SQL 记录配置 2.查询方式 二、SQL分析方法 (一)执行计划 1.概述 2.查看执行计划 (二&#x…...
题解:CF1070B Berkomnadzor
CF1070B Berkomnadzor 题解 解题思路 不难想到将 IP 地址转化为二进制后插入一个字典树中,转化后二进制的长度就是 x x x 的长度。我们需要记录每个串结尾的颜色,不妨设黑名单为 1 1 1,白名单为 0 0 0,初始时每个位置的颜色是…...

shell 学习笔记:数组
目录 1. 定义数组 2. 读取数组元素值 3. 关联数组 4. 在数组前加一个感叹号 ! 可以获取数组的所有键 5. 在数组前加一个井号 # 获取数组的长度 6. 数组初始化的时候,也可以用变量 7. 循环输出数组的方法 7.1 for循环输出 7.2 while循环输出 7.2.1 …...

计算机基础知识复习9.5
数据交换 电路交换:交换信息的两个主机之间简历专用通道,传输时延小,实时性强,效率低,无法纠正错误。 报文交换:信息拆分成小包(报文)大小无限制,有目的/源等信息提高利用率。有转…...
spark.sql
from pyspark.sql import SparkSession from pyspark.sql.functions import col, count, mean, rank, row_number, desc from pyspark.sql.window import Window from pyspark.sql.types import StructType, StructField, StringType, IntegerType# 初始化 SparkSession 对象 s…...

2024 数学建模高教社杯 国赛(A题)| “板凳龙”舞龙队 | 建模秘籍文章代码思路大全
铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用等距螺线,多目标规划等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍&am…...

kaggle注册收不到验证码、插件如何下载安装
综合这三个来看, 1.插件下载用的大佬给的分享链接 2.下载好压缩包以后需要解压缩 Header Editor插件网盘下载安装教程 - 哔哩哔哩 (bilibili.com) 3.安装插件时没找到crx文件,在浏览器插件界面点击“加载解压缩的扩展” 4.复制网址到插件里ÿ…...
k8s相关技术栈
文章目录 一、k8s技术栈核心组件常见工具和服务生态系统 二、k8s服务组件控制平面组件节点组件附加组件和服务 三、k8s 常见资源核心资源扩展资源 四、系列文档其他参考 一、k8s技术栈 Kubernetes(常被简称为 K8s,其中 “K” 代表 “Kubernetes” 的首字…...
uniapp h5项目页面中使用了iframe导致浏览器返回按键无法使用, 返回不了上一页.
uniapp h5项目页面中使用了iframe导致浏览器返回按键无法使用, 返回不了上一页. 在 UniApp 中使用 iframe 加载外部页面时,可能会遇到返回键行为不符合预期的问题。这是因为 iframe 本身可以包含多个页面的历史记录,而默认情况下,浏览器的返…...

《2024网络安全十大创新方向》
网络安全是创新驱动型产业,技术创新可以有效应对新的网络安全挑战;或是通过技术创新降低人力成本投入,提升企业运营效率。为推动行业技术创新、产品创新与应用创新,数说安全发布《2024年中国网络安全十大创新方向》,涵…...

深入解析反射型 XSS 与存储型 XSS:原理、危害与防范
在网络安全领域,跨站脚本攻击(XSS)是一种常见的安全漏洞。XSS 攻击可以分为反射型 XSS 和存储型 XSS 两种类型。本文将详细介绍这两种类型的 XSS 攻击的原理、危害和防范措施。 一、反射型 XSS 1、原理 反射型 XSS 攻击也称为非持久性 XSS …...

【STM32+HAL库】---- 驱动MAX30102心率血氧传感器
硬件开发板:STM32F407VET6 软件平台:cubemaxkeilVScode1 MAX30102心率血氧传感器工作原理 MAX30102传感器是一种集成了红外光源、光电检测器和信号处理电路的高度集成传感器,主要用于心率和血氧饱和度的测量。以下是MAX30102传感器的主要特点…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...