2015-02-08 2 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 отдельно питон

Я изменил строку выше, чтобы удалить что-либо не численное или «+» для работы с международными номерами. Но, если плюс появится позже в строке, он также не будет удален, что приведет к сбою. У меня есть идея, как это сделать «длинный путь», но мне интересно, может ли кто-нибудь предложить более чистый метод.

Я ищу что-то вдоль линий:

[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' 

ИЛИ

>>> 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

+0

Рад, что все получилось .. –

Смежные вопросы