[Python]Expression Régulière
Fermé
lovelylulu
Messages postés
1
Date d'inscription
mercredi 18 avril 2012
Statut
Membre
Dernière intervention
18 avril 2012
-
18 avril 2012 à 18:14
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 24 avril 2012 à 16:19
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 24 avril 2012 à 16:19
A voir également:
- [Python]Expression Régulière
- Citizen code python avis - Accueil - Outils
- Expression de recherche - Guide
- Tu es un amour expression ✓ - Forum Loisirs / Divertissements
- Python retour à la ligne dans le code - Forum Python
4 réponses
dodoecchi
Messages postés
454
Date d'inscription
samedi 9 septembre 2006
Statut
Membre
Dernière intervention
26 avril 2012
29
24 avril 2012 à 11:18
24 avril 2012 à 11:18
Pas besoin d'expressions régulières, python est bien plus flexible ;)
fichier lines.txt
fichier script.py
bon codage ;)
fichier lines.txt
Un mot qui commence par une majuscule ? Quoi?? Cette ligne commande par une ponctuation et est suivie par une majuscule ! ponctuation + minuscule
fichier script.py
# coding=latin-1 file = open("lines.txt","r") ponctuations = ("?", "!", ",", ";", ".") for line in file.readlines(): test = line.strip() if not len(test): continue print "\tTest : " + test if test[0].isupper(): print "Commence par une majuscule" elif test.startswith(ponctuations): test = test[1:] test = test.strip() if test[0].isupper(): print "Commence par un signe de ponctuation + manjuscule" else: print "Commence par un signe de ponctuation SANS majuscule" else: print u"rien trouvé..."
bon codage ;)
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 24/04/2012 à 12:02
Modifié par heyquem le 24/04/2012 à 12:02
Et si le texte commence par une majuscule mais qu'il y a dans plus loin dans le texte une ponctuation suivie d'une minuscule, ça doit donner False ou True ?
Même question si le texte commence par une minuscule puis plus loin il y a une ponctuation suivie d'une majuscule.
Soit dit en passant, entre une ponctuation et le mot qui la suit, il est possible d'y avoir un ou plusieurs blancs ?
Post scriptum:
ah, il semble que les conditions ne portent que sur le début d'un texte
Merci de préciser
Même question si le texte commence par une minuscule puis plus loin il y a une ponctuation suivie d'une majuscule.
Soit dit en passant, entre une ponctuation et le mot qui la suit, il est possible d'y avoir un ou plusieurs blancs ?
Post scriptum:
ah, il semble que les conditions ne portent que sur le début d'un texte
Merci de préciser
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 avril 2012 à 13:36
24 avril 2012 à 13:36
Une expression régulière convient très bien pour ce problème:
fichier lines.txt
code:
résultat:
fichier lines.txt
Un mot qui commence par une majuscule ? Quoi?? Cette ligne commence par une ponctuation suivie par une majuscule ! ponctuation + minuscule À la claire fontaine ! Île de Ré , ::;
code:
import re regx = re.compile(' *([?!,;.])? *([A-ZÀÂÆÙÛÜYÇÉÈÊËÏÎÔOE]?).*?(\w?)') with open("lines.txt","r") as f: for line in (x for x in f if x.strip()): mat = regx.match(line) if mat.group(2): ecr = '-True- : Le premier mot commence par une majuscule' \ + (', une ponctuation le précède.' if mat.group(1) else '.') elif mat.group(3): ecr = '-False- : Le premier mot ne commence pas par une majuscule.' else: ecr = "-*****- : Il n'y a pas de mot" print '-------------------------------------\n%r\n%s' % (line,ecr)
résultat:
------------------------------------- 'Un mot qui commence par une majuscule\n' -True- : Le premier mot commence par une majuscule. ------------------------------------- '? Quoi?? Cette ligne commande par une ponctuation et est suivie par une majuscule\n' -True- : Le premier mot commence par une majuscule, une ponctuation le précède. ------------------------------------- '! ponctuation + minuscule\n' -False- : Le premier mot ne commence pas par une majuscule. ------------------------------------- '\xc0 la claire fontaine\n' -True- : Le premier mot commence par une majuscule. ------------------------------------- ' ! \xcele de R\xe9\n' -True- : Le premier mot commence par une majuscule, une ponctuation le précède. ------------------------------------- ' , ::; \n' -*****- : Il n'y a pas de mot
dodoecchi
Messages postés
454
Date d'inscription
samedi 9 septembre 2006
Statut
Membre
Dernière intervention
26 avril 2012
29
24 avril 2012 à 14:48
24 avril 2012 à 14:48
isupper montre vite ses limites car il trouve pas toutes les lettres accentués
en voici une liste un peu plus exaustive tirée de wikipedia
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØOESþÙÚÛÜÝY
pour du code lisible je prefere ne pas utiliser d'expression régulière. après, peut etre que c'est un exercice où il faut utiliser des regexp... qui sait...
en voici une liste un peu plus exaustive tirée de wikipedia
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØOESþÙÚÛÜÝY
pour du code lisible je prefere ne pas utiliser d'expression régulière. après, peut etre que c'est un exercice où il faut utiliser des regexp... qui sait...
ponctuations = ("?", "!", ",", ";", ".") accents = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØOESþÙÚÛÜÝY" def startsWithUpper(str): str = str.strip() if len(str) == 0: return False if str[0].isupper(): return True else: for a in accents: if str.startswith(a): return True return False def customTest(str): if startsWithUpper(test): return True elif test.startswith(ponctuations): return startsWithUpper(test[1:]) else: return False
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 avril 2012 à 14:57
24 avril 2012 à 14:57
horreur !
n'emploie pas le nom d'un module comme identifiant: remplace str par ce que tu veux mais qui ne soit pas un identifiant d'un objet défini dans le langage
n'emploie pas le nom d'un module comme identifiant: remplace str par ce que tu veux mais qui ne soit pas un identifiant d'un objet défini dans le langage
dodoecchi
Messages postés
454
Date d'inscription
samedi 9 septembre 2006
Statut
Membre
Dernière intervention
26 avril 2012
29
24 avril 2012 à 15:00
24 avril 2012 à 15:00
c'est un exemple rien de plus --'
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 24/04/2012 à 15:16
Modifié par heyquem le 24/04/2012 à 15:16
dodoecchii, j'ai condensé un peu ton code. C'est l'intérêt de Python: permettre des codes très courts qui restent très compréhensibles
ponctuations = ("?", "!", ",", ";", ".") accents = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØOESþÙÚÛÜÝY" def startsWithUpper(x): x = x.strip() return False if not x else (x[0].isupper() or any(x.startswith(a) for a in accents)) with open('lines.txt') as f: for line in f: print '---------------------\n%r\n%s' \ % (line, startsWithUpper(line[1 if line.startswith(ponctuations) else 0:]))
dodoecchi
Messages postés
454
Date d'inscription
samedi 9 septembre 2006
Statut
Membre
Dernière intervention
26 avril 2012
29
Modifié par dodoecchi le 24/04/2012 à 15:15
Modifié par dodoecchi le 24/04/2012 à 15:15
chacun sa façon de voir les choses
pour moi, par exemple, le code aéré c'est lisible
le code trop condensé, c'est juste attroce pour apprendre :/
a vouloir trop condenser, t'a bouffé une balise...
(mais j'avoue que "or any" et "with" ne sont pas des structures qui me sont très familières. je vais regarder ça)
pour moi, par exemple, le code aéré c'est lisible
le code trop condensé, c'est juste attroce pour apprendre :/
a vouloir trop condenser, t'a bouffé une balise...
(mais j'avoue que "or any" et "with" ne sont pas des structures qui me sont très familières. je vais regarder ça)
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 avril 2012 à 15:19
24 avril 2012 à 15:19
le problème de balise n'avait rien à voir avec la façon d"écrire un code mais celle dont j'avais copié-collé pour modifier un premier jet