一日一技:如何正确使用 re.sub 的第二个参数

简介: 一日一技:如何正确使用 re.sub 的第二个参数

摄影:产品经理与产品经理两个人吃了20道菜

在Python的正则表达式模块re中,我们常用的一个方法是 re.sub。它的作用是正则替换。例如我要把字符串 abc123xyz456中的数字替换为 *号:

import re
a = 'abc123xyz456'
b = re.sub('\d+', '*', a)
print(b)

运行效果如下图所示:

但如果我们看过 Python 官方文档中,关于re.subAPI[1],我们会发现,第二个参数不仅可以是字符串,还可以是一个函数,如下图所示:

如果第二个参数是函数,那么它需要接收一个参数,这个参数是一个match对象。如下图所示:

原字符串中有多少项被匹配到,这个函数就会被调用几次。

至于传进来的这个match对象,我们调用它的.group(0)方法,就能获取到被匹配到的内容,如下图所示:

这个功能有什么用呢?我们设想有一个字符串abc18123456794xyz123,这个字符串中有两段数字,并且长短是不一样的。第一个数字是11位的手机号。我想把字符串替换为:abc[隐藏手机号]xyz***。不是手机号的数字,每一位数字逐位替换为星号。

如果你不知道re.sub第二个参数可以是函数,那么你可能需要写两次正则替换:

import re
a = 'abc18123456794xyz123'
b = re.sub('\d{11}', '[隐藏手机号]', a)
c = re.sub('\d', '*', b)
print(c)

如下图所示:

但现在有了新方法以后,解决方案就简单了:

import re
def test(repl):
    if len(repl.group(0)) == 11:
        return '[隐藏手机号]'
    else:
        return '*' * len(repl.group(0))
a = 'abc18123456794xyz123'
b = re.sub('\d+', test, a)
print(b)

运行效果如下图所示:

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 人工智能
人工智能技术全流程入门:10 个关键步骤快速上手
本教程系统讲解人工智能入门10大核心步骤,涵盖基础认知、工具使用、数据理解、实操应用与伦理规范,结合场景导向与避坑指南,帮助新手快速掌握AI技术应用逻辑,轻松实现从零到一的跨越,助力职场增效与技能提升。
|
存储 算法 数据处理
从零搭建向量数据库:实现文本语义检索实战
本文带你从零实现一个最小可用的文本语义检索系统,剖析向量数据库核心模块:文本嵌入、向量存储、近似最近邻搜索、元数据过滤等。不追求极致性能,重在理解工程设计权衡。通过亲手搭建,掌握系统瓶颈与优化方向,真正用好成熟方案。
|
9月前
|
运维 监控 安全
在多人协作的项目中,如何避免代码被误回滚?
在多人协作的项目中,如何避免代码被误回滚?
447 57
|
7月前
|
存储 NoSQL Java
探索Spring Boot的函数式Web应用开发
通过这种方式,开发者能以声明式和函数式的编程习惯,构建高效、易测试、并发友好的Web应用,同时也能以较小的学习曲线迅速上手,因为这些概念与Spring Framework其他部分保持一致性。在设计和编码过程中,保持代码的简洁性和高内聚性,有助于维持项目的可管理性,也便于其他开发者阅读和理解。
230 0
|
7月前
|
开发者 Windows 容器
msixbundle
*.msixbundle 是一种用于 Windows 应用程序打包和分发 的文件格式,主要用于 Microsoft Store 或 企业内部分发 的应用。它是一种 打包容器,包含多个 .msix 或 .appx 包,通常用于为不同的架构(如 x86、x64、ARM)提供一个统一的安装包。
|
存储 搜索推荐 大数据
大数据在医疗领域的应用
大数据在医疗领域有广泛应用,包括电子病历的数字化管理和共享,提升医疗服务效率与协同性;通过数据分析支持医疗决策,制定个性化治疗方案;预测疾病风险并提供预防措施;在精准医疗中深度分析患者基因组信息,实现高效治疗;在药物研发中,加速疗效和副作用发现,提高临床试验效率。此外,在金融领域,大数据的“4V”特性助力业务决策前瞻性,被广泛应用于银行、证券和保险的风险评估、市场分析及个性化服务中,提升运营效率和客户满意度。
1574 6
|
10月前
|
人工智能 自然语言处理 前端开发
【CodeBuddy】三分钟开发一个实用小功能之:可爱风空调遥控器
本文介绍了一款基于 Vue.js 开发的可爱风格空调遥控器应用,具备温度调节、模式选择、风速控制及开关功能,界面精美且交互流畅。借助 CodeBuddy 这一 AI 编程助手,开发者通过自然语言描述快速生成高质量代码,大幅提升开发效率。CodeBuddy 不仅适用于初学者快速入门,也能帮助资深开发者优化复杂业务逻辑。文中附有核心代码示例,涵盖组件结构与样式设计,展示了如何实现动态效果和响应式布局。未来还可进一步拓展智能控制功能,提升用户体验。
296 0
【CodeBuddy】三分钟开发一个实用小功能之:可爱风空调遥控器
|
11月前
|
存储 人工智能 运维
自我提升可以从哪些方面:AI时代的能力重构与终身进化
在数字技术与AI快速发展的背景下,自我提升从“阶段式学习”转变为“持续性进化”。文章从认知升级、技能进化、生态构建三个维度解析AI时代个人能力提升的核心路径。强调个体需从知识积累转向能力重构,通过批判性思维、跨域关联和动态适应性实现思维跃迁;同时构建复合能力体系,并借助AI工具与协作网络,在数字化转型中扮演价值创造者角色。最终,自我提升将超越传统框架,成为能力生态的动态演进过程。
|
数据挖掘 Python
Python中实现数字统计最高频率的技术探索
Python中实现数字统计最高频率的技术探索
518 0
|
消息中间件 负载均衡 监控
RocketMQ 5.0 客户端负载均衡机制|学习笔记
快速学习 RocketMQ 5.0 客户端负载均衡机制
538 0
RocketMQ 5.0 客户端负载均衡机制|学习笔记