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 :

Comment remplacer un texte capturé dans une regex par un autre et reinjecter le tout ? [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Points : 88
    Points
    88
    Par défaut Comment remplacer un texte capturé dans une regex par un autre et reinjecter le tout ?
    Bonjour,

    j'ai un texte du style :

    aaa item cccc aaa item cccc cccc bbb aaa jjj fff aaaa aaa item cccc kkk lll mmm
    je souhaite crée une regex qui permet :
    de localiser le format (ça je sais faire) :
    aaa item ccc
    donc ça donnerais :
    aaa\s(\w+)\scccc


    et changer item par test2 par exemple. (la j'ai du mal)
    et reinjecter le tout dans le texte ce qui donne au final :

    aaa test2 cccc aaa test2 cccc cccc bbb aaa jjj fff aaaa aaa test2 cccc kkk lll mmm
    en vous remerciant,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    La communauté Python a écrit un how-to sur comment utiliser les regex qui contient (entre autre) un paragraphe sur search and replace. Il faut commencer par là. Et si vous ne vous en sortez pas, çà vous permettra d'avoir un minimum de code à poster.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Points : 88
    Points
    88
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import re
    phrase = "aaa item cccc aaa item cccc cccc bbb aaa jjj fff aaaa aaa item cccc kkk lll mmm"
    p = re.compile('aaa\s(\w+)\scccc')
    phrase=p.sub('test2',phrase)
    print(phrase)
    voila mon test :

    test2 test2 cccc bbb aaa jjj fff aaaa test2 kkk lll mmm
    attendu :
    aaa test2 cccc aaa test2 cccc cccc bbb aaa jjj fff aaaa aaa test2 cccc kkk lll mmm
    bref : il me remplace l'expression entiere au lieu de me remplacer juste le (captured group)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par markham Voir le message
    bref : il me remplace l'expression entiere au lieu de me remplacer juste le (captured group)
    Pour pouvoir retrouver des bouts de la capture dans la sortie, il faut grouper ces bouts (avec des ()) et faire des backref dans la chaîne r'\1test\2' quels bouts remettre. Mais cela est bien expliqué dans la documentation non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Points : 88
    Points
    88
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # -*- coding: utf-8 -*-
    import re
    phrase = "aaa item cccc aaa item cccc cccc bbb aaa jjj fff aaaa aaa item cccc kkk lll mmm"
    p = re.compile('(aaa)\s(\w+)\s(cccc)')
    phrase=p.sub(r'\1 test2 \3',phrase)
    print(phrase)
    du coup cela me donne ça, au lieu d'un seul capture groupe, j'en ai 3

    cela fonctionne mais je ne trouve pas ça sexy, mais bon faute de mieux.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par markham Voir le message
    au lieu d'un seul capture groupe, j'en ai 3

    cela fonctionne mais je ne trouve pas ça sexy, mais bon faute de mieux.
    Vous pourriez en avoir seulement 2 r'(aaa)\s\w+\s(cccc)'

    De toutes façons, pour formuler que vous voulez récupérer des bouts, il faut bien pouvoir dire lesquels et où les placez dans la sortie (ce qui n'est pas utile pour les bouts que vous ne voulez pas récupérer).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. [RegEx] caractère pour remplacer tous les caractères dans une regex
    Par sp2308 dans le forum Langage
    Réponses: 6
    Dernier message: 09/02/2008, 01h06
  2. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  3. Comment récupérer le texte sélectionné dans une liste déroulante ?
    Par Je-cherche-pfe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/09/2007, 20h35
  4. comment remplacer les resultat NULL dans une requete HQL
    Par Rambler dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/08/2007, 16h55
  5. comment mettre du texte formaté dans une frame?
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/10/2005, 14h55

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