前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如何正确使用 re.sub 的第二个参数

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

作者头像
青南
发布2020-05-13 20:11:42
1.4K0
发布2020-05-13 20:11:42
举报
文章被收录于专栏:未闻Code未闻Code

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

代码语言:javascript
复制
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第二个参数可以是函数,那么你可能需要写两次正则替换:

代码语言:javascript
复制
import re


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

如下图所示:

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

代码语言:javascript
复制
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)

运行效果如下图所示:

参考资料

[1] API: https://docs.python.org/3/library/re.html#re.sub

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档