2015-02-08 88 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