从电话号码字符串中删除不需要的字

时间:2012-06-20 11:25:27

标签: python regex

我的目标是使用正则表达式代码来获取电话号码并删除不需要的字符。

import re
strs = 'dsds +48 124 cat cat cat245 81243!!'
match = re.search(r'.[ 0-9\+\-\.\_]+', strs)

if match:                      
    print 'found', match.group() ## 'found word:cat'
else:
    print 'did not find'

仅返回:

+48 124 

如何归还整个号码?

3 个答案:

答案 0 :(得分:4)

您想使用sub(),而不是search()

>>> strs = 'dsds +48 124 cat cat cat245 81243!!'
>>> re.sub(r"[^0-9+._ -]+", "", strs)
' +48 124   245 81243'

[^0-9+._ -]negated character class^在这里很重要 - 这个表达式意味着:“匹配既不是数字,也不是加号,点,下划线,空格或短划线的字符”。

+告诉正则表达式引擎匹配前一个令牌的一个或多个实例。

答案 1 :(得分:4)

re.sub()的问题在于您在最终的电话号码字符串中获得了额外的空格。非正则表达式方式,返回正确的电话号码(没有任何空格):

>>> strs = 'dsds +48 124 cat cat cat245 81243!!'
>>> ''.join(x for x in strs if x.isdigit() or x == '+')
'+4812424581243'

答案 2 :(得分:0)

这是我用单个替换所有非数字的方法 连字符,它似乎对我有用:

# convert sequences of non-digits to a single hyphen
fixed_phone = re.sub("[^\d]+","-",raw_phone)