Pour ne rien rater de mon actu

Computer Code Python CCP 19 : expressions régulières 6

1 Le symbole $ et le symbole ^

Le symbole ^ au début d'une regex indique que la correspondance doit se produire au début du texte cherché.

De la même façon, vous pouvez mettre un symbole $ à la fin de la regex pour indiquer que la chaîne doit finir avec cette regex.

import re

startWithWhy = re.compile(r'^Why')
print(startWithWhy.search('Why are you learning Python?'))
if startWithWhy.search('Do you know why?') == None:
    print("There is no 'Why' at the beginning!")

La regex r'\d$' correspond aux chaînes finissant avec un chiffre.

import re
finishWithDigit = re.compile(r'\d$')
print(finishWithDigit.search('We are in 2018'))
if finishWithDigit.search('You are twenty one') == None:
    print('There is no digit')

La regex r'^\d+$' correspond aux chaînes qui commencent et finissent par un nombre.

import re

onlyNumbers = re.compile(r'^\d+$')
print(onlyNumbers.search('1234567890'))
if onlyNumbers.search('12345xyz67890') == None:
    print('There are others characters, not only numbers')
if onlyNumbers.search('12 34567890') == None:
    print("A space is a character, and it's not a digit")

2 Le joker

Le . dans une regex est appelé joker et peut correspondre à n'importe quel caractère sauf une nouvelle ligne.

import re

atRegex = re.compile(r'.at')
print(atRegex.findall('The fat cat in the hat sat on the flat mat.'))
paraRegex = re.compile(r'para.')
para = """
Les jeux paraolympiques sous la pluie nécessitent des parapluies, 
des parachutes et/ou des parapentes et beaucoup de parapharmacie 
pour les paraplégiques.
Et un paratonnerre évitera de se faire paralyser les systèmes
parasympathique animé par des paraboles pleines de paramètres.
"""
print(paraRegex.findall(para))

3 Le duo de choc

import re

nameRegex = re.compile(r'First Name: (.*) Last Name: (.*)')
mo = nameRegex.search('First Name: James Last Name: Bond')
print(mo.group(1))
print(mo.group(2))

Par défaut le combo .* est en mode glouton.

import re

nongreedyRegex = re.compile(r'<.*?>')
mo = nongreedyRegex.search('<To serve man> for dinner.>')
print(mo.group())

greedyRegex = re.compile(r'<.*>')
mo = greedyRegex.search('<To serve man> for dinner.>')
print(mo.group())

4 Bilan

Nous avons vu dans ce cours :

  • comment chercher une regex en début ou en fin de chaîne de caractère
  • comment utiliser le joker
  • comment combiner le joker avec la répétition multiple pour chercher n'importe quel chaîne de caractères

5 Pour aller plus loin