0
votes

Le champ du numéro de téléphone contient des numéros de téléphone américains et doit être modifié au format international, avec "+ 1-" devant le numéro de télépho

j'utilise

Sabrina Green,8+1-02-867-5309,S+-ystem Administrator

Mais j'obtiens une sortie ::

import re
def transform_record(record):
  new_record = re.sub(r'(,[^a-zA-z])', r'\1+1-',record)
  return new_record

print(transform_record("Sabrina Green,802-867-5309,System Administrator")) 
#Excpected Output:::" Sabrina Green,+1-802-867-5309,System Administrator"


3 commentaires

Vous pouvez utiliser re.sub(r',(?=\d)', r',+1-',record) pour ajouter +1- avant a , qui est suivi d'un chiffre.


Une faute de frappe dans l'expression régulière et le remplacement est dans le mauvais ordre. Et généralement: vous faites l'hypothèse qu'aucun autre champ ne commence par autre chose que az.


Veuillez envisager d'accepter la réponse (voir Comment accepter les réponses SO ) qui vous convient le mieux.


6 Réponses :


1
votes

Certaines personnes, confrontées à un problème, pensent: «Je sais, je vais utiliser des expressions régulières.» Maintenant, elles ont deux problèmes.

def transform_record(record, number_field=1):
    fields = record.split(",")  # See note.
    if not fields[number_field].startswith("+1-"):
        fields[number_field] = "+1-" + fields[number_field]
    return ",".join(fields)

J'ai une note dans la mise en œuvre ci-dessus. Vous travaillez probablement avec des données CSV. Vous devriez utiliser un analyseur CSV approprié au lieu de simplement diviser par des virgules si c'est le cas. Le simple fractionnement par virgules se passe mal si un champ contient des virgules échappées.


0 commentaires

1
votes

Si vos données ne sont pas bien ordonnées et que vous souhaitez ajouter +1- avant tout , suivi d'un chiffre, vous pouvez utiliser

re.sub(r',(?=\d)', r',+1-', record)

Voir la démo regex .

Le modèle ,(?=\d) correspond d'abord à une virgule, puis (?=\d) une anticipation positive s'assure qu'il y a un chiffre juste après, sans consommer le chiffre (et il reste dans le résultat de remplacement).

Voir la démo de Python en ligne .


0 commentaires

-1
votes
new_record = re.sub(r",([\d-]*),",r",+1-\1,",record)
This pattern will work.

0 commentaires

1
votes
import re

def transform_record(record):

new_record = re.sub(r',(?=\d)', r',+1-',record)

return new_record

print(transform_record("Sabrina Green,802-867-5309,System Administrator")) 
# Sabrina Green,+1-802-867-5309,System Administrator

print(transform_record("Eli Jones,684-3481127,IT specialist")) 
# Eli Jones,+1-684-3481127,IT specialist

print(transform_record("Melody Daniels,846-687-7436,Programmer")) 
# Melody Daniels,+1-846-687-7436,Programmer

print(transform_record("Charlie Rivera,698-746-3357,Web Developer")) 
# Charlie Rivera,+1-698-746-3357,Web Developer

0 commentaires

0
votes
import re
def transform_record(record):
    new_record = re.sub(r"([\d-]+)",r"+1-\1",record)
    return new_record

0 commentaires

0
votes
new_record = re.sub(r",([\d])",r",+1-",record)
This works for me.

0 commentaires