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 :

Une expression régulière utile


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut Une expression régulière utile
    Bonjour à tous,

    Voilà mon petit souci, j'ai déjà utilisé des expressions régulière pour vérifier une string mais je n'arrive pas à extraire une sous-chaîne d'une chaîne initiale...

    J'ai quelque-chose du type :
    "/home/user/.qgis/python/plugins/MeP/Apercu/nom_image_Portrait.png"
    "/home/user/.qgis/python/plugins/MeP/Apercu/nom_image_Paysage.png"
    "/home/user/.qgis/python/plugins/MeP/Apercu/nom_image2_Paysage.png"

    et là je veux extraire uniquement le "nom_image" (qui est de taille variable), je parviens à le faire avec trois fonctions split() à la suite mais je suis persuadé qu'il y a beaucoup plus élégant et surtout plus rapide....

    Je n'ai pas compris toute la doc que j'ai lu donc si quelqu'un peut m'informer, toutes les idées sont les bienvenues !

    Merci d'avance!

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import re
    pattern = re.compile(r'(?:.*/)?(\w+?)_(?:Portrait|Paysage)\.png')
    pattern.match("/home/user/.qgis/python/plugins/MeP/Apercu/nom_image_Portrait.png").groups()
    >>> ('nom_image',)
    pattern.match("/home/user/.qgis/python/plugins/MeP/Apercu/nom_image_Paysage.png").groups()
    >>> ('nom_image',)

  3. #3
    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
    Ou sans utiliser les expressions régulières

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> ch="/home/user/.qgis/python/plugins/MeP/Apercu/nom_image_Portrait.png"
    >>> import re
    >>> for i in ch.split('/'):
    	if i.endswith('png') and ('Portrait' in i or 'Paysage' in i):
    		print i
     
     
    nom_image_Portrait.png

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut
    Merci kango

    Je vois à peu près ce que signifie cette expression mais
    par contre je ne comprends pas comment est extrait uniquement le nom...

    Si tu as encore une minute à me consacrer...

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    c'est extrait grâce aux groupes. un groupe est entouré de parenthèses:

    j'ai utilisé des groupes non-capturant pour les infos que l'on a pas besoin de conserver:

    ici, le nom que tu souhaites extraire est capturé par:


  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut
    Merci bien, c'est cette histoire de groupe capturant que je ne connaissais pas !

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    et pourquoi pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for x in ("/home/user/.qgis/python/plugins/MeP/Apercu/gagarigou_Portrait.png",
              "/home/user/.qgis/python/plugins/MeP/Apercu/LOUIS XIV_Paysage.png",
              "/home/user/.qgis/python/plugins/MeP/Apercu/aujourd'hui_Paysage.png"):
        print x[x.rfind('/')+1 : x.rfind('_P')]

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

Discussions similaires

  1. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  2. Une expression réguliére
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/09/2005, 20h14
  3. Réponses: 6
    Dernier message: 17/08/2005, 12h38
  4. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54
  5. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22

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