方法一:使用正则表达式里的sub方法匹配替换(最好的方法)
import re
phone = "13434562341"
result = (r"(\d{3})(\d{4})(\d{4})", r"\1****\3", phone)
print(result) # 输出结果 134****2341
方法二:使用字符串的replace方法
phone = "13434562341"
result = (phone[3:7], '****')
print(result) # 输出结果 134****2341
但replace方法有时会出现意想不到的bug,就是当手机号码非常特殊时(虽然可能性小)!
phone1 = "18933333333"
phone2 = "13333333333"
result1 = (phone[3:7], '****')
result2 = (phone[3:7], '****')
print(result1) # 输出结果 189********
print(result2) # 输出结果 1********33
可以看到,replace方法本意是想将号码的第4到7位替换为星号,但像phone1和phone2这种特殊的号码就会发生意外情况。
像phone1的号码还可以使用替换次数控制得到想要的结果,但phone2的号码无法做到
phone1 = "18933333333"
phone2 = "13333333333"
result1 = (phone[3:7], '****', 1) # 控制replace只替换一次
result2 = (phone[3:7], '****', 1)
print(result1) # 输出结果 189****3333
print(result2) # 输出结果 1****333333
方法三:使用切片
phone_number = '13888888888'
# 将手机号码中间的四位数替换为 '*' 字符
hidden_phone_number = phone_number[:3] + '****' + phone_number[7:]
print(hidden_phone_number) # 输出结果 138****8888
这种方法要优于方法二。精准替换,不存在方法二中的替换大法bug