如何用Xs替换电话号码?

时间:2014-02-15 15:07:24

标签: python regex python-2.7 replace

我使用以下正则表达式在文本中查找电话号码(号码可以带或不带国家代码,使用不同的分隔符等):

phonePattern = re.compile(".*?\d?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?", re.S)
result = phonePattern.search(text)

现在我想用X替换数字。例如,如果我找到了1 (123) 123-4567之类的电话,则应在文本中将其替换为1 (XXX) XXX-XXXX。我该怎么办?

2 个答案:

答案 0 :(得分:2)

使用phonePattern.sub()来电,但放弃.*?开始和结束(无论如何都不需要这些):

phonePattern = re.compile("\d?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4})")
result = phonePattern.sub(lambda m: re.sub('\d', 'X', m.group(1)), text)

如果没有.*?模式,也可以删除re.S标志。领先的\d?在这里是多余的;在该数字与(字符之间没有空格允许它肯定与您的样本模式不匹配。

对于找到的每个匹配项,都会调用lambda函数来提供替换,只需获取分组文本(m.group(1))并用X个字符替换所有数字。

演示:

>>> import re
>>> text = 'Here is a phone number: 1 (123) 123-4567'
>>> phonePattern = re.compile("\d?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4})", re.S)
>>> phonePattern.sub(lambda m: re.sub('\d', 'X', m.group(1)), text)
'Here is a phone number: 1 (XXX) XXX-XXXX'

答案 1 :(得分:0)

import re
phone = "1 (123) 123-4567"
replaced_phone = phone[0] + re.sub("\d", "X", phone[1:]) # 1 (XXX) XXX-XXXX