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 :

Regex avec parenthèse dans chaîne [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 265
    Par défaut Regex avec parenthèse dans chaîne
    Bonsoir,

    j'ai quelques difficultés à savoir comment m'y prendre pour gérer des parenthèses dans une chaîne. J'ai bien essayé quelques possibilités, divers "regex tester on line" me confirment le regex ci-dessous mais malheureusement retranscrit dans un script, ça plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import re
    data = "kdsjkqjsdkqjsk({'xxx':123})"
    match = re.match("\((.*)\)", data)
    print match.group(1)
    Le but étant de récupérer cette partie de la chaîne : {'xxx':123}

    Si des fois vous aviez une petite idée.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    match = re.match(".*\((.*)\)", data)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 265
    Par défaut
    Ok, cela fonctionne. Merci pour l'aide.

    Bonne fin de soirée et bon week-en.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    Dans votre cas la fonction re.search est mieux adaptée pour rechercher du contenu au milieu d'une ligne.

    L'antislash permet d'indiquer qu'il s'agit d'un caractère \( parenthèse ouvrante et \) parenthèse fermante. Plusieurs caractères spéciaux ou dont l'usage peut servir à d'autres utilisations nécessitent le préfixe \.

    La syntaxe reg-ex utilise les parenthèses pour désigner un groupe/sous-groupe, d'où la nécessité de préfixer le caractère parenthèse.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import re
    data = "abcdefgh"
    match = re.search("(...)(...)", data)
    match.group(0) # abcdef
    match.group(1) # abc
    match.group(2) # def
    Le group(0) retourne la totalité de la chaîne trouvée.

    L'explication de la syntaxe:
    (...) : les parenthèses forment un groupe, les ... désignent 3 caractères de tout type confondu en dehors du retour à la ligne.

    Dans votre exemple ça peut clairement être utile pour extraire les éléments en une seule passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import re
    data = "kdsjkqjsdkqjsk({'xxx':123})"
    match = re.search("\({'(.*)':(.*)}\)", data)
    match.group(0) # ({'xxx':123})
    match.group(1) # xxx
    match.group(2) # 123
    L'explication de la syntaxe:

    \({'(.*)':(.*)}\)

    On peut y voir 2 groupes.

    \({' Permet de rechercher la chaîne : ({'
    (.*) Permet de créer un groupe dont le contenu total est extrait à l'aide de .*
    ': recherche de la chaîne
    (.*) Création d'un second groupe pour en extraire le contenu total
    }\) pour finaliser l'extraction de la chaîne })

    Le fait que le premier groupe soit xxx tient du fait que ce qui se trouve avant est déjà extrait par \({' et se termine par l'extraction de ':
    On peut donc extraire la totalité sans se soucier de sa longueur.

    Il faut reconnaitre que la syntaxe est très lourde à lire mais le langage est sacrément puissant, efficace.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 265
    Par défaut
    Bonsoir,

    Merci pour ce complément d'information très clair et utile.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    S'il on est sûr de la forme des accolades, et qu'il en existe une seule forme, le pattern suivant pourrait suffire

    Ça peut diminuer les étapes de recherche de beaucoup, mais faut-il savoir si cette forme est unique ou pas...

    Voir simplifier la regex de YCL-1 par ce pattern


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

Discussions similaires

  1. [RegEx] Regex avec virgule dans double quotes
    Par LeHibou2 dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2012, 20h16
  2. Problème de regex avec des parenthèses imbriquées
    Par sopsag dans le forum Général Python
    Réponses: 4
    Dernier message: 15/07/2010, 12h02
  3. Réponses: 1
    Dernier message: 02/08/2008, 16h26
  4. Appliquer regex avec parenthèse capturantes sur SELECT
    Par vallica dans le forum Requêtes
    Réponses: 3
    Dernier message: 01/02/2008, 12h34
  5. [Tableaux] Problème avec remplacement dans chaîne
    Par Baptiste Wicht dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 10h04

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