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 :

Expression régulières en Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut Expression régulières en Python
    Bonjour à Tous,

    J'ai une liste des chaînes de caractères et je veux supprimer celles qui terminent par _(chaine_de_caractère).

    C'est possible apparemment en utilisant les expressions régulières..

    Savez-vous comment le faire en Python s'il vous plaît ?

    J'ai essayé avec cette expression ou ny.title est la chaine qui peut avoir cette expression mais apparemment c'est faux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sre="(.)*_((.)*)"
    if re.match(sre, ny.title) is not None:
        print ("existe")
    Merci d'avance et très bonne journée !

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    sans autre critère pour "chaine de caractères" on pourrait simplement utiliser if not re.match('.*_.+', ny.title) je pense, à tester

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> l = ['titi', 'toto_PAS BON', 'coincoin', 'pouet gruik _BERK']
    >>> [i for i in l if not re.match('.*_.+', i)]
    ['titi', 'coincoin']

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut
    Je vous remercie pour votre réponse.

    j'ai enfin trouvé l'expression convenable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    re.match(r"(.)*(_)+(\()+(.)*(\))+", test)
    Par contre je ne trouve pas comment supprimer la chaine contenant à la fin cette forme :_(XXX)

    J'ai essayé avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    p = re.compile(r"(.)*(_)+(\()+(.)*(\))+")
        st=re._sub(p,'',test)
    Mais voila ce que j'ai eu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    st=re._sub(p,'',test)
    AttributeError: 'module' object has no attribute '_sub'
    Toute information sera le bien venue !

  4. #4
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Ton expression régulière me semble beaucoup trop compliquée...
    La solution de BufferBob me parait parfaite !
    Il faut juste y ajouter la reconnaissance des "(" et ")".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #coding:latin1
    import re
    l1 = ['titi', 'toto_(PAS BON)', 'coincoin', 'pouet gruik _(BERK)',' celles qui terminent par _(chaîne_de_caractère)']
    l2 = [ i for i in l1 if not re.match(r".*_\(.*\)",i) ]
    print 'avant',l1
    print 'après',l2
    Tu n'as pas besoin de sub (et non "_sub") qui sert à remplacer un morceau de chaîne par un autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    avant ['titi', 'toto_(PAS BON)', 'coincoin', 'pouet gruik _(BERK)', ' celles qui terminent par _(chaîne_de_caractère)']
    après ['titi', 'coincoin']

Discussions similaires

  1. Expression régulière Python & telnetlib
    Par Gecko dans le forum Général Python
    Réponses: 3
    Dernier message: 12/06/2014, 13h39
  2. Compréhension d'un script PYTHON et expressions régulières
    Par Jéjé34 dans le forum Général Python
    Réponses: 2
    Dernier message: 04/06/2013, 07h58
  3. Problème expression régulière python
    Par cup of tea dans le forum Général Python
    Réponses: 2
    Dernier message: 28/03/2012, 00h48
  4. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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