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 :

les expressions régulières


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut les expressions régulières
    salut tout le monde,
    je veux transformer les mots qui ont deux lettres qui se répètent plus de 2 fois en utilisant les expression régulière. comment faire ça?. pour mieux expliquer voici un exemple:

    blablablabla->bla
    hahahahaha->ha

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Pour les chaines ayant une sous-chaine de longueur indéfinie se répétant plus de 2 fois (en Python 2.X) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import re
    for chaine in (u'blablablabla',u'hahahahaha'):
        print re.sub( pattern=r'(.+)\1{2,}', repl=r'\1', string=chaine)
    qui donne :

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    merci arnoud, mais une fois le nombre de caractères répétés dépasse six caractères, il ne donne pas les résultat attendus.
    par exemple : blablablablablablablablablablablabla
    et loooooovvvvve. merci d'avance.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Une fonction récursive résout le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import re
    pattern = re.compile(r'(.+)\1{1,}')
    def supprime_doublons(ch1):
        ch2 = re.sub( pattern, repl=r'\1', string=ch1)
        if ch1 == ch2:
            return ch2
        else:
            return supprime_doublons(ch2)
     
    if __name__ == '__main__':
        tests = (u'blablablabla',u'hahahahaha',u'blablablablablablablablablablablabla',u'loooooovvvvve')
        for chaine in tests:
            print supprime_doublons(chaine)

  5. #5
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Il y a plus simple, il suffit d’utiliser un opérateur non-glouton (donc qui consomme aussi peu de caractères que possible)*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import re
    for chaine in (u'blablablabla', u'hahahahaha', u'loooooovvvvve'):
        print re.sub(pattern=r'(.+?)\1{2,}', repl=r'\1', string=chaine)

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    merci pour vos réponses.
    mais dans le cas la chaine 'goooooood', il me donne la résultat 'god', alors que je veux avoir le mot 'good'. merci d'avance.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par phpines Voir le message
    merci pour vos réponses.
    mais dans le cas la chaine 'goooooood', il me donne la résultat 'god', alors que je veux avoir le mot 'good'. merci d'avance.
    en même temps il peut pas deviner que dans ce cas-là, il ne faut pas enlever toute la redondance

  8. #8
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Oui, si tu cherches à faire un correcteur orthographique, les regex ne sont pas l’outils idéal*! Regarde plutôt du côté de enchant, par exemple…

Discussions similaires

  1. [VB.net][vs2005] Problème avec les expressions régulières
    Par zouhib dans le forum Windows Forms
    Réponses: 13
    Dernier message: 22/06/2006, 15h56
  2. Problème avec les expressions régulières
    Par Premium dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 18/06/2006, 16h41
  3. Les Expressions Régulières
    Par zEndymion dans le forum Access
    Réponses: 4
    Dernier message: 12/06/2006, 13h36

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