[Python]Expression Régulière
lovelylulu
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
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 :
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
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 :
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
A voir également:
- [Python]Expression Régulière
- Citizen code python avis - Accueil - Outils
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Python pix ✓ - Forum Python
- Mot secret python pix ✓ - Forum Python
4 réponses
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 ;)
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
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
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
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:]))
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)