举一反三学python(7)—活用正则

例题:
    对下方出现的电话号码进行加密

    需求最终效果: 客户1:181****5458,客户2:139****0342

tel = "客户1:18119285458,客户2:13937560342"

一、最简单的方法:

#   字符串切片

tel1 = tel.split(',')     
for i in tel1:
    print(i[:7]+'****'+i[-4:])

        第一种方法最适合单一的字符串和格式化的字符串,因为取索引方便,如果要设置的字符串包含在一段字符串中,格式不规范,那就不适用了,那就必须掌握最实用的正则表达式方法。

二、必杀技:

1、正则加匿名函数lambda

import re

result1 = re.sub('\d{11}', lambda x:x.group()[:3] + '*' * 4 + x.group()[-4:], tel)
print(result1)

2、正则加函数

import re

def func(temp):                 # 定义一个得到符合题目要求的函数
    str_ = temp.group()
    return str_[:3] + '*' * 4 + str_[-4:]    # 返回的结果是最终要求的替换的结果

# 用正则替换的方法实现效果,func是sub()在替换字符串时默认调用的函数

result = re.sub('\d{11}', func, tel)   
print(result)

3、正则分组匹配

import re

# 编译正则表达式对象,(\d{3})分组一,(\d{4})分组二,(\d{4})分组三
pattern = re.compile('(\d{3})(\d{4})(\d{4})')   

result2 = re.sub(pattern,'\\1****\\3',tel)        # 用正则替换的方法实现效果
print(result2)

三、四种方法的运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值