IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Intéraction entre "{}" d'une regex et "{}" d'un formatage string [Python 3.X]


Sujet :

Python

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 688
    Points : 30 981
    Points
    30 981
    Billets dans le blog
    1
    Par défaut Intéraction entre "{}" d'une regex et "{}" d'un formatage string
    Bonjour à tous

    Comme dit dans le titre, j'essaye d'inclure un formatage type "{}" dans une regex or comme la regex interprète le "{}" à sa façon ben je ne m'en sors pas

    Exemple: j'ai une string de ce type chaine="123ttt456". Je veux remplacer tous les "t" par un simple "x".
    La regex de base: print(re.sub(r"t{1,3}", r"x", chaine)) => ok, pas de souci.

    Maintenant je veux paramétrer mon nombre de "t" (aujourd'hui 3, demain 18). J'écris ma regex de cette façon: print(re.sub(r"t{1,%d}" % 3, r"x", chaine)) => là aussi ok.
    Mais maintenant je voudrais écrire mon formatage string à la méthode "format()". Et là quand j'écris print(re.sub(r"t{1,{0}}".format(3), r"x", chaine)) il plante avec un "ValueError: unexpected '{' in field name". Je sens bien qu'il y a un souci avec les accolades mais j'ai tenté du backslash etc sans trop de résultat probant. Donc je ne vois pas trop où ça pêche et comment l'arranger.

    Quelqu'un aurait-il une solution?

    Code complet pour ceux qui voudraient tester
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/env python3
    # coding: utf-8
     
    import re
     
    chaine="123ttt456"
    print(re.sub(r"t{1,3}", r"x", chaine))
    print(re.sub(r"t{1,%d}" % 3, r"x", chaine))
    print(re.sub(r"t{1,{0}}".format(3), r"x", chaine))

    Merci à tous.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    Bonjour,

    pour échapper les accolades dans le cas des format strings il faut les doubler.
    Ce code ne plante pas chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import re
     
    chaine="123ttt456"
     
    print(re.sub(r"t{{1,{0}}}".format(3), r"x", chaine))

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 688
    Points : 30 981
    Points
    30 981
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zancrows Voir le message
    pour échapper les accolades dans le cas des format strings il faut les doubler.
    Effectivement, c'est un souci lié au format d'une string et non à la regex. J'aurais dû le trouver tout seul si je ne n'étais pas parti dans cette idée de regex.

    Merci de m'avoir remis dans la bonne direction
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] split en fonction des espace en excluant les portion entre quotes
    Par Invité dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/06/2009, 16h58
  2. Mettre une variable entre quotes
    Par laurentibus dans le forum PL/SQL
    Réponses: 7
    Dernier message: 12/12/2008, 17h12
  3. Gérer du script entre quote
    Par Alexino2 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/07/2006, 23h44
  4. sql dynamic : passage de parametre entre quotes
    Par de LANFRANCHI dans le forum SQL
    Réponses: 12
    Dernier message: 26/05/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo