一日一技:如何正确使用 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)

运行效果如下图所示:

目录
相关文章
|
存储 算法 数据库
阿里云InfluxDB®基于TSI索引的数据查询流程
简介 时间序列数据库是目前技术发展最快的数据库类型之一。作为业界最为流行的时序数据库InfluxDB,其部署运行十分简洁方便,支持高性能时序数据的读写,在应用程序监控、物联网(IoT)领域有着广泛的应用。
4136 1
|
7月前
|
人工智能 自然语言处理 网络安全
基于阿里云 Milvus + DeepSeek + PAI LangStudio 的低成本高精度 RAG 实战
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
存储 缓存 算法
Flink(十二)【容错机制】(2)
Flink(十二)【容错机制】
|
数据处理 C语言
深入解析x86架构:X86, X86_32和X86_64的差异与应用
深入解析x86架构:X86, X86_32和X86_64的差异与应用
|
监控 Linux 数据安全/隐私保护
问题记录:开机提示emergency mode(紧急模式)如何处理
在依赖Linux作为核心操作系统的环境中,系统的稳定和可靠性通常是我们理所当然的期待。然而,即使是最稳定的系统,有时也会在启动时出现异常,突然推到紧急模式的怀抱。这种模式,通常有被称为“Emergency Mode”,在Linux系统面临关键错误时作为一种安全网,但对于那些不熟悉如何应对此类问题的小伙伴来说,它可能带来困惑甚至恐慌。
问题记录:开机提示emergency mode(紧急模式)如何处理
|
11月前
|
数据采集 自然语言处理 文字识别
92页的llama 3.1技术报告,我替你们啃下来了
作者花了半个月时间,认真读完了llama 3.1技术报告,并总结成本文,希望能帮到对这个感兴趣的小伙伴们。
92页的llama 3.1技术报告,我替你们啃下来了
|
存储 消息中间件 算法
Flink(十二)【容错机制】(1)
Flink(十二)【容错机制】
Flink(十二)【容错机制】(1)
|
SQL 关系型数据库 MySQL
【MySQL】DQL-案例练习-DQL基本介绍&语法&执行顺序(代码演示)
【MySQL】DQL-案例练习-DQL基本介绍&语法&执行顺序(代码演示)
|
12月前
|
存储 搜索推荐 大数据
大数据在医疗领域的应用
大数据在医疗领域有广泛应用,包括电子病历的数字化管理和共享,提升医疗服务效率与协同性;通过数据分析支持医疗决策,制定个性化治疗方案;预测疾病风险并提供预防措施;在精准医疗中深度分析患者基因组信息,实现高效治疗;在药物研发中,加速疗效和副作用发现,提高临床试验效率。此外,在金融领域,大数据的“4V”特性助力业务决策前瞻性,被广泛应用于银行、证券和保险的风险评估、市场分析及个性化服务中,提升运营效率和客户满意度。
1316 6
|
算法 数据挖掘 数据库
【数据挖掘】频繁项集挖掘方法中Apriori、FP-Growth算法详解(图文解释 超详细)
【数据挖掘】频繁项集挖掘方法中Apriori、FP-Growth算法详解(图文解释 超详细)
1926 0