例题:
对下方出现的电话号码进行加密
需求最终效果: 客户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)