Multiligne dans les regex Python
Les expressions régulières ont leurs particularités lorsqu'elles travaillent avec des chaînes multilignes. Examinons-les à l'aide de l'exemple de la chaîne suivante, contenant des caractères ordinaires, des caractères de saut de ligne et de tabulation :
txt = '''111
222
333
444'''
Saut de ligne
Les caractères de saut de ligne peuvent être capturés
à l'aide de la commande '\n' :
res = re.sub('\n', '!', txt)
print(res)
La chaîne suivante sera affichée comme résultat (les espaces entre les lignes sont des tabulations) :
'111! 222! 333! 444'
Tabulation
Les caractères de tabulation peuvent être capturés
à l'aide de la commande '\t' :
res = re.sub('\t', '!', txt)
print(res)
Résultat de l'exécution du code :
'''
!111
!222
!333
!444
'''
Comportement du point
La commande '.' pour une chaîne multiligne
ne capture pas les caractères de saut de ligne :
res = re.sub('.', '!', txt)
print(res)
Résultat de l'exécution du code :
'''
!!!
!!!!
!!!!
!!!!
'''
Tout caractère
Pour capturer tous les caractères dans une chaîne
multiligne, une astuce est utilisée sous la forme
de la combinaison [\s\S]. Cette construction
trouvera tous les caractères ordinaires et tous les sauts
de ligne :
res = re.sub('[\s\S]', '!', txt)
print(res)
Résultat de l'exécution du code :
'!!!!!!!!!!!!!!!!!!'
Dollar
La commande '
en mode multiligne
capturera la fin de chaque ligne :
res = re.sub('
', '!', txt)
print(res)
Résultat de l'exécution du code :
'''
111!
222!
333!
444!
'''
Problèmes pratiques
Soit la chaîne :
'''
abc
def
ghi
jkl
'''
Écrivez une expression régulière qui transformera cette chaîne en la suivante :
'''
abc!
def!
ghi!
jkl!
'''
Soit la chaîne :
'''
abc
def
ghi
jkl
'''
Écrivez une expression régulière qui transformera cette chaîne en la suivante :
'''
! abc
! def
! ghi
! jkl
'''
Soit la chaîne :
'''
abc
def
ghi
jkl
'''
Écrivez une expression régulière qui transformera cette chaîne en la suivante :
'''!
abc
def
ghi
jkl
!'''
Soit la chaîne :
'''
abc
def
ghi
jkl
'''
Écrivez une expression régulière qui transformera cette chaîne en la suivante :
'''!
! abc
! def
! ghi
! jkl
!'''
Soit la chaîne :
'''
abc
def
ghi
jkl
'''
Écrivez une expression régulière qui transformera cette chaîne en la suivante :
'''!
abc!
def!
ghi!
jkl!
!'''
Soit la chaîne :
'''
abc
def
ghi
jkl
'''
Écrivez une expression régulière qui transformera cette chaîne en la suivante :
'''
!abc
!def
!ghi
!jkl
'''