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 :

Problème python regexp avec re.sub


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut Problème python regexp avec re.sub
    Bonjour,

    Je cherche depuis 2 heures comment obtenir le résultat 'ip=127.0.0.2'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.sub('(^\s*%s\s*%s\s*).*' % ('ip', '='), r'\1%s' % '127.0.0.2', 'ip=127.0.0.1')
    'J7.0.0.2'
    Un espace en plus me donne le bon résultat mais avec un espace...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.sub('(^\s*%s\s*%s\s*).*' % ('ip', '='), r'\1 %s' % '127.0.0.2', 'ip=127.0.0.1')
    'ip= 127.0.0.2'
    Le mieux que j'arrive à faire c'est (mais j'ai les quotes en trop ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.sub('(^\s*%s\s*%s\s*).*' % ('ip', '='), r'\1%r' % '127.0.0.2', 'ip=127.0.0.1')
    "ip='127.0.0.2'"
    Quelqu'un à une idée ?

    Merci

  2. #2
    Membre éclairé Avatar de Lujeni
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 52
    Par défaut
    2 conseils pour avoir plus de réponses:

    Utilises les balises codes et explique mieux ton problème.

    Tu veux simplement passer de 'ip=127.0.0.1' à 'ip=127.0.0.2' en utilisant une REgex ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    Citation Envoyé par Lujeni Voir le message
    Tu veux simplement passer de 'ip=127.0.0.1' à 'ip=127.0.0.2' en utilisant une REgex ?
    Oui voila

    En fait je veux faire une lib python que j'utiliserai (du moins cette méthode) pour par exemple modifier des variables dans des fichiers de conf, je la je faisais juste un test sur cette variable bidon "ip".

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Dans le dernier cas, les quotes en trop viennent du %r. Mais si on prend %s, ça ne marche plus (=> 'J7.0.0.2')!

    Le problème, c'est le paramétrage du motif de remplacement, et en particulier l'ordre d’exécution pour son traitement: traitement de chaine d'abord, puis interprétation regex ensuite. Ainsi, r'\1%s' % '127.0.0.2' devient '\1127.0.0.2', et re ne peut plus retrouver le groupe 1 qui devrait être identifié par '\1': il se contente de '\112' => 'J'.

    Il y a peut-être une solution intégrée, mais en tout cas, en voici une qui marche. Elle consiste à remplacer le motif de remplacement par une fonction de remplacement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def rempl(g):
        return g.group(1) + '127.0.0.2'
     
    print re.sub(r'(^\s*%s\s*%s\s*).*' % ('ip', '='), rempl, 'ip=127.0.0.1')
    ip=127.0.0.2

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    Merci pour cette réponse rapide

    Ca marche nickel j'ai juste adapté avec lamba

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re.sub(r'(^\s*%s\s*%s\s*).*' % ('ip', '='), lambda m: "%s%s" % (m.group(1), '127.0.0.2'), 'ip=127.0.0.1')

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

Discussions similaires

  1. Problèmes python avec Internet explorer
    Par pascalcovolo dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 27/06/2008, 13h42
  2. Problème de performance avec une regexp
    Par NicoV dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 21/02/2008, 18h46
  3. [Regexp] Problème de réalisation avec les || (OU)
    Par omlip dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 16/10/2006, 10h35
  4. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  5. [MySQL] Problème avec DATE SUB et INTERVAL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/01/2006, 00h36

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