Programmation PYTHON
Cours 6
Nassim ZELLAL
2019/2020
Expressions régulières - 2
La mémorisation de modèle - référence arrière
Les parenthèses () : mémorisation (référence arrière).
ligne="eleve3 au poste3"
if [Link]("(\d).+poste\\1",ligne):
#on peut ajouter le préfixe « r » et écrire (r"(\d).+poste\1",ligne):
print("ok")
#----------------------------------------------------------#
ligne="eleve3 au poste5"
if [Link]("(\d).+poste\\1",ligne):
#on peut ajouter le préfixe « r » et écrire (r"(\d).+poste\1",ligne):
print("ok")
La mémorisation de modèle - group()
Les parenthèses () s’utilisent avec la méthode
group() pour extraire la sous-chaîne de
caractères placée entre ces parenthèses.
import re
ligne="eleve3 au poste5"
x=[Link]("(.+)(\d)(.+)(po(.+))(\d)",ligne)
print([Link](6)+" "+[Link](5)+" "+[Link](4)+"
"+[Link](3)+" "+[Link](2)+" "+[Link](1))
La mémorisation de modèle - group()
La mémorisation de modèle - groups()
La méthode groups() retourne un tuple
contenant tous les sous-groupes reconnus par
l’expression régulière.
import re
m = [Link]("(\d+)\.(\d+)", "24.1632")
#il n’est pas nécessaire de déspécialiser le point (\.)
dans cet exemple
print([Link]())
La mémorisation de modèle - groups()
Expressions régulières - regroupement
import re,sys
var=open([Link][1],'r')
res=[Link]()
for i in range(len(res)):
if [Link](r"\b(homme|femme)\b",res[i]):
print(res[i],end="")
[Link]()
Expressions régulières - flags (arguments optionnels)
re.I : recherche insensible à la casse.
re.S : traiter la chaîne comme une ligne simple.
(avec l’argument optionnel re.S, le caractère .
reconnaît aussi les sauts de ligne).
Expressions régulières - flags (arguments optionnels)
import sys,re
Extraction des sauts de ligne
var=open([Link][1],'r') précédés d’un point
var2=open("[Link]",'w') d’exclamation.
a=1
for i in [Link]():
x=[Link]("!(.$)",i,re.S)
if x!=None :#éviter les objets de type "None" (NoneType
object) /ou bien if x:
[Link]("Ligne "+str(a)+" résultat : "+[Link](1))
a+=1 Un objet "None" est incompatible
avec la méthode group().
Expressions régulières - flags (arguments optionnels)
Expressions régulières - flags (arguments optionnels)
import sys,re
var=open([Link][1],'r')
var2=open("[Link]",'w')
for i in [Link]():
x=[Link]("(chocolat)",i,re.I)
if x:#éviter les objets de type "None"
[Link]("Résultat : "+[Link](1)+"\n")
Expressions régulières - flags (arguments optionnels)
Expressions régulières - flags (arguments optionnels)
import sys,re
var=open([Link][1],'r')
var2=open("[Link]",'w')
for i in [Link]():
x=[Link]("chocolat",i,re.I)
for c in x:
[Link]("Résultat : "+c+"\n")
Expressions régulières - flags (arguments optionnels)
Expressions régulières - substitution
import sys,re
var=open([Link][1],'r')
var2=open("[Link]",'w')
for i in [Link]():
x=[Link]("chocolat","pain",i,flags=re.I)
[Link](x)
#Avec sub() on doit écrire « flags » avant un flag.
Expressions régulières - substitution
Expressions régulières - look-around
(?=expression) regarde-devant positif (look ahead)
(?!expression) regarde-devant négatif (look ahead)
(?<=expression) regarde-derrière positif (look
behind)
(?<!expression) regarde-derrière négatif (look
behind)
Expressions régulières - look-around
import re
x = "J'ai mangé le croissantqui était sur la table"
y = "I catch the red fly"
Il y a une tabulation ici.
z = "Je m'appelle Tom-cat "
xx=[Link]("(croissant)(?!\s)",x)
print([Link](1)) # reconnaît croissant
yy=[Link]("(?<=\t)(.+)",y)
print([Link](1)) #reconnaît 'fly'
zz=[Link]("(?<=-)(cat)(?=\s)",z)
print([Link](1))# reconnaît 'cat' dans 'Tom-cat'
Exercice 1
Modifier le script ci-dessous (slide 12), afin qu'il
puisse extraire tous les sauts de ligne du fichier
« [Link] ».
import sys,re
var=open([Link][1],'r')
var2=open("[Link]",'w')
a=1
for i in [Link]():
x=[Link]("!(.$)",i,re.S)
if x:
[Link]("Ligne "+str(a)+" résultat :
"+[Link](1))
a+=1
Exercice 2
Modifier le script ci-dessous (slide 16), afin qu'il
puisse extraire toutes les occurrences de
« chocolat » du fichier « [Link] » sans utiliser les
2 boucles for.
import sys,re
var=open([Link][1],'r')
var2=open("[Link]",'w')
res=[Link]()
for i in res:
x=[Link]("chocolat",i,re.I)
for c in x:
[Link]("Résultat : "+c+"\n")
Exercice 3
1/ Faire un script qui prend en entrée "[Link]"
encodé en UTF-8 du cours 6;
2/ Trier les tokens par ordre alphabétique
décroissant et afficher ce tri dans un fichier;
3/ Afficher dans un autre fichier :
3.1/ le nombre de tokens;
3.2/ les phrases exclamatives;
3.3/ les phrases interrogatives;
3.4/ afficher toutes les occurrences du token
« homme » qui sont suivies d’un verbe ;