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"
6 Réponses :
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.
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 .
new_record = re.sub(r",([\d-]*),",r",+1-\1,",record) This pattern will work.
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
import re def transform_record(record): new_record = re.sub(r"([\d-]+)",r"+1-\1",record) return new_record
new_record = re.sub(r",([\d])",r",+1-",record) This works for me.
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.