Pour ne rien rater de mon actu

Computer Code Python CCP 20 : expressions régulières 7

1 Correspondre des nouvelles lignes avec le caractère .

Le combo .* pourra correspondre à tout sauf à une nouvelle ligne. En passant re.DOTALL comme second argument de re.compile(), vous pourrez faire correspondre le . avec tous les caractères, incluant le caractère de nouvelle ligne.

import re

noNewlineRegex = re.compile('.*')
print(noNewlineRegex.search('Liberté.\nEgalité.\nFraternité.').group())

print('-' * 30)

newlineRegex = re.compile('.*', re.DOTALL)
print(newlineRegex.search('Liberté.\nEgalité.\nFraternité.').group())

2 Récapitulatif des symboles des regex

? 0 ou 1 occurrence du groupe le précédent
* 0 ou plusieurs occurrences
+ au moins une occurrence
{n} exactement n occurrences
{n, } n ou plus occurrences
{, m} de 0 à m occurrences
{n,m} au moins n et au plus m occurrences
*? version non gloutonne de *
+? version non gloutonne de +
{n,m}? version non gloutonne de {n,m}
^test signifie que la chaîne doit commencer par test
test$ signifie que la chaîne doit finir par test
. correspond à n'importe quel caractère (sauf \n)
\d correspond à 1 chiffre
\w correspond à 1 mot
\s correspond à 1 espace
\D tout sauf 1 chiffre
\W tout sauf 1 mot
\S tout sauf 1 espace
[abc] correspond à tout caractère entre crochets
[^abc] correspond à tout caractère qui n'est pas entre crochets

3 Correspondance sensible à la casse

Normalement, les regex correspondent au texte avec la casse précisée.

import re

regex1 = re.compile('Bonjour')
print(regex1.search('Bonjour les apprentis pythoniens.').group())

regex2 = re.compile('BONJOUR')
if regex2.search('Bonjour les apprentis pythoniens.') == None:
    print('no match')

regex3 = re.compile('bonjour')
if regex3.search('Bonjour les apprentis pythoniens.')  == None:
    print('no match')

Mais parfois vous voulez simplement la correspondance avec les lettres sans vous soucier de la casse.

import re

regex1 = re.compile('Bonjour', re.I)
print(regex1.search('Bonjour les apprentis pythoniens.').group())

regex2 = re.compile('BONJOUR', re.IGNORECASE)
print(regex2.search('Bonjour les apprentis pythoniens.').group())

regex3 = re.compile('bonjour', re.I)
print(regex3.search('Bonjour les apprentis pythoniens.').group())

4 Bilan

Nous avons vu dans ce cours :

  • Comment correspondre des nouvelles lignes avec le caractère .
  • Un récapitulatif des symboles des regex
  • La gestion de la casse

5 Pour aller plus loin