2012-06-20 64 views
4

我正在寻找正则表达式代码来获取电话号码并删除不需要的字符。从电话号码字符串中删除不需要的字符

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 

我怎样才能返回整个多少?

回答

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^在这里很重要 - 这个表达意味着:“匹配既不是数字也不是加号,点,下划线,空格或短划线的字符”。

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

+0

非常感谢! – Efrin

+0

但是如果某些数据具有阿尔法数字条目并且我们需要两个字母数字数据但不包括额外的括号或逗号。 – 2014-09-30 14:06:02

4

re.sub()的问题在于您在最终的电话号码字符串中有额外的空格。非正则表达式的方法,该方法返回正确的电话号码(不带空格):

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

这是我用一个单一的 连字符替换所有非数字字符,它似乎为我工作:

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