2015-02-08 97 views
0
def parse_num(raw_phone): 
    parsed = ''.join([c for c in raw_phone if c.isdigit() or c == '+']) 
    return parsed 

我期待清洗之前将它传递给python-phonenumbers为最终验证非数字字符原因失败的字符串。分别解析E164字符串的第一个字符在python

我修改了上面的字符串以删除任何非数字或'+'来处理国际号码。但是,如果在字符串后面出现加号,它也不会被删除而导致失败。 我有一个如何做到这一点的想法,但我想知道是否有人可以提出一个更清洁的方法。

我要找的线沿线的东西:

[c for c in raw_phone if c.isdigit() or first character == '+'] 

任何帮助或在正确的方向指向一些会大加赞赏。

回答

1

删除除起始+符号以外的所有非数字字符有什么问题?

re.sub(r'(?!^\+)\D', r'', phonenum) 

(?!^\+)\D迫使正则表达式引擎匹配任何非数字字符,但不是 DEMO

例子:

>>> def parsenum(raw_phone): 
     return re.sub(r'(?!^\+)\D', r'', raw_phone) 

>>> parsenum('+foo456753bar+452') 
'+456753452' 

OR

>>> def parsenum(raw_phone): 
     res = "" 
     if raw_phone[0] == '+': 
      res = res + '+' 
     for c in raw_phone: 
      if c.isdigit(): 
       res = res + c 
     return res 

>>> parsenum('+foo456753bar+452') 
'+456753452' 
+0

这正是我曾是 寻找! 我曾经与你的第二个结果类似,但希望尽可能简洁,你的第一个选择是理想的,谢谢! – binz 2015-02-08 23:29:15

+0

很高兴解决.. – 2015-02-08 23:42:01