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