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 :

If et Expression Régulière


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut If et Expression Régulière
    Bonjour,

    J'ai un problème avec mon code. J'aimerais que mon programme me renvoie true ou false selon les deux cas...
    Si mon texte commence par un mot qui commence en majuscule renvoie true
    Si il y a une ponctuation [".", "?", "!"] et ensuite un mot qui commence en majuscule renvoie true
    Si il y a une ponctuation suivie d'un mot qui commence en minuscule renvoie false

    Voilà ce qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    l=re.findall(r"[\w']+|[.,!?:]",line)
                print(l)
                for i in range(0,len(l)-1):
                    if l[i] in ".?!" and l[i+1]==r"[A-Z]\w*":
                        print("ok")
                    else:
                        print("ligne",ligne," est faux:",l[i+1])
    Merci pour votre aide

  2. #2
    Membre Expert

    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
    Par défaut
    Les regex sont largement assez puissantes pour faire ça, sans code complémentaire*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    reg = re.compile("[.,!?;]*[A-Z]")  # 0,1 ou plus ponctuations suivies d’une majuscule
    for l in lines:
        if reg.match(l):
            print("ok")
        else:
            print("error!")
    PS*: utilise la balise code (le #), c’est plus meilleur…

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Merci pour la réponse.
    Comment puis-je faire pour que les lignes d'erreurs s'affichent ?

  4. #4
    Membre Expert

    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
    Par défaut
    …par exemple.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Merci !

    Pouvez-vous me dire si je fais,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    l=re.findall(r"[\w']+|[.,!?:]",line)
                print(l)
                for i in range(0,len(l)-1):
                if l[i] in ".?!":
                    if l[i+1]==r"[A-Z]\w*":
                        print("ok")
                    else:
                        print("ligne",ligne," est faux:",l[i+1])
     
                ligne=ligne+1
    y a t'il quelque chose qui change ?
    Désolée...

  6. #6
    Membre Expert

    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
    Par défaut
    Aïe aïe aïe… Je ne vais pas reprendre tout ce qui ne va pas dans ce code (en vrac: indentation fantaisiste, "line" qui devient "ligne", syntaxe de type "arithmétique de pointeur C" (ligne+1) qui n’existe pas en python, etc.), mais plutôt vous donner un bout de code qui fait ce que vous voulez faire (enfin, je pense) –*et vous recommander chaleureusement quelques tutos python (rien de très récent , mais d’autres ici auront peut-être des liens pour python3)…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Quand on va réutiliser une regex souvent, on la compile une seule fois…
    reg = re.compile("[.,!?;]*[A-Z]")  # 0,1 ou plus ponctuations suivies d’une majuscule
    # lines contient toutes les lignes, ce peut être une liste, un fichier ouvert en lecture, …
    for l in lines:  # l contiendra successivement chaque ligne de lines.
        if reg.match(l):  # Si la regex "correspond" (match), la ligne l est valide.
            print("ok")
        else: # Sinon, on affiche une erreur avec la ligne fautive.
            print("ERROR:", l)

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

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. 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