2009-10-11 7 views
0

Je voudrais transformer un numéro de téléphone de cette forme +33.300000000 en 03.00.00.00.00Comment effectuer ce RegExp en Python?

+33 est l'indicatif il pourrait être 2 ou 3 chiffres longueur.

Chiffres après le. sont le numéro de téléphone. Il peut s'agir de 9 ou 10 chiffres.

J'essaie comme ceci:

p = re.compile("\+[0-9]+\.([0-9]+)", re.VERBOSE) 
number = "+33.300000000" 
p.sub("0\1", number) 

Mais cela ne fonctionne pas.

Cependant, les coutures de recherche au travail:

>>> p.search(number).groups() 
('300000000',) 

Et après comment modifier 0300000000 dans 03.00.00.00.00 en Python?

Merci pour votre aide,

NATIM

+0

Pour les neuf chiffres, vous ajoutez un 0 principal, que se passe-t-il pour 10 chiffres? –

+0

Oui, vous remplacez le code de téléphone avec un 0 – Natim

Répondre

3

L'approche la plus simple est un mélange de RE et de manipulation pure de chaînes, par exemple:

import re 

def doitall(number): 
    # get 9 or 10 digits, or None: 
    mo = re.search(r'\d{9,10}', number) 
    if mo is None: return None 
    # add a leading 0 if they were just 9 
    digits = ('0' + mo.group())[-10:] 
    # now put a dot after each 2 digits 
    # and discard the resulting trailing dot 
    return re.sub(r'(\d\d)', r'\1.', digits)[:-1] 

number = "+33.300000000" 
print doitall(number) 

émet 03.00.00.00.00, selon les besoins.

Oui, vous pouvez tout faire dans un RE, mais ça ne vaut pas le mal de tête - le mélange fonctionne bien ;-).

+2

vous pouvez également utiliser 'digits = mo.group() .zfill (10)' –

+0

Ok, c'est exactement cela. Je vous remercie. – Natim

+1

et 'return". ". Join (re.findall (r '(\ d \ d)', chiffres))' –

0

Dans le terminal, il fonctionne comme ça:

p = re.compile("\+[0-9]+\.([0-9]+)", re.VERBOSE) 
number = "+33.300000000" 
p.sub("0\\1", number) 

Et dans le script python, il fonctionne comme ça:

p = re.compile("\+[0-9]+\.([0-9]+)", re.VERBOSE) 
number = "+33.300000000" 
p.sub("0\1", number) 
Questions connexes