24
Python : expressions r´ eguli ` eres Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 20

Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

Python : expressions regulieres

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 20

Page 2: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

Plan

1 Introduction

2 search

3 match

4 findall

5 sub

6 split

7 Contraintes

H & H: Research and Training 2 / 20

Page 3: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Introduction

Python

Expressions regulieres

outil de recherche puissant adopte par la plupart des langages deprogrammation

facilitant la recherche dans les chaınes de caracteres (et donc leremplacement, le calcul de nombre d’occurrences...)

permettent de verifier si des chaınes de caracteres respectentcertains formats (email, numero de telephone...)

syntaxe quasi-similaire quel que soit le langage de programmation

H & H: Research and Training 3 / 20

Page 4: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Introduction

Python

Quatre methodes de recherche disponibles

search(motif, chaine) : permet de chercher motif dans chaine etretourner soit un objet de correspondance soit None

match(motif, chaine) : fonctionne comme search mais chercheseulement au debut de la chaıne

findall(motif, chaine) : retourne une liste contenant toutes lesoccurrences de motif dans chaine

split(motif, chaine) : permet de decouper chaine selon le motif definidans motif

sub(motif, new, chaine) : permet de remplacer toutes les occurrences demotif dans chaine par new

H & H: Research and Training 4 / 20

Page 5: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

search

Python

Recherche d’une sous-chaıne dans une chaıne de caractere

import re

str = "Bonjour tout le monde"resultat = re.search("Tout", str)

if resultat:print("Trouve")

else:print("Non trouve")

# affiche Non trouve

H & H: Research and Training 5 / 20

Page 6: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

search

Python

Recherche avec une expression reguliere insensible a la casse

import re

str = "Bonjour tout le monde"resultat = re.search("Tout", str, re.IGNORECASE)

if resultat:print("Trouve")

else:print("Non trouve")

# affiche Trouve

H & H: Research and Training 6 / 20

Page 7: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

match

Python

Cependant, la methode match verifie la presence d’un motifseulement au debut de la chaıne

import re

str = "Bonjour tout le monde"resultat = re.match("Tout", str, re.IGNORECASE)

if resultat:print("Trouve")

else:print("Non trouve")

# affiche Non trouve

H & H: Research and Training 7 / 20

Page 8: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

match

Python

La methode match trouve bien le motif Bon

import re

str = "Bonjour tout le monde"resultat = re.match("Bon", str, re.IGNORECASE)

if resultat:print("Trouve")

else:print("Non trouve")

# affiche Trouve

H & H: Research and Training 8 / 20

Page 9: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

findall

Python

Pour chercher toutes les occurrences d’un motif

import re

str = "Bonjour tout le monde"resultat = re.findall("on", str, re.IGNORECASE)

print(resultat)

# affiche [’on’, ’on’]

H & H: Research and Training 9 / 20

Page 10: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

sub

Python

Pour remplacer toutes les occurrences d’un motif

import re

str = "Bonjour tout le monde"resultat = re.sub("on", "an", str)

print(resultat)

# affiche Banjour tout le mande

H & H: Research and Training 10 / 20

Page 11: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

sub

Python

Pour indiquer le nombre d’occurrences a remplacer

import re

str = "Bonjour tout le monde"resultat = re.sub("on", "an", str, 1)

print(resultat)

# affiche Banjour tout le monde

H & H: Research and Training 11 / 20

Page 12: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

split

Python

Pour decouper une chaıne selon un motif (ici un espace)

import re

str = "Bonjour tout le monde"resultat = re.split(" ", str)

print(resultat)

# affiche [’Bonjour’, ’tout’, ’le’, ’monde’]

H & H: Research and Training 12 / 20

Page 13: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

split

Python

On peut aussi indiquer le nombre d’occurrence a considerer pourle motif de decoupage

import re

str = "Bonjour tout le monde"resultat = re.split(" ", str, 2)

print(resultat)

# affiche [’Bonjour’, ’tout’, ’le monde’]

H & H: Research and Training 13 / 20

Page 14: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

split

Contraintes exprimees avec les expressions regulieres

a+ : 1 ou plusieurs a

a* : 0 ou plusieurs a

a? : 0 ou 1 a

a{n, m} : minimum n occurrences de a consecutives, maximum m occurrences de aconsecutives

a{n} : exactement n occurrences de a consecutives

a{n, } : minimum n occurrences de a consecutives

print(re.findall("ba?c", "bacbaacbc"))# affiche Banjour tout le monde

print(re.findall("ba{0,1}c", "bacbaacbc"))# affiche Banjour tout le monde

H & H: Research and Training 14 / 20

Page 15: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

split

Contraintes exprimees avec les expressions regulieres

a+ : 1 ou plusieurs a

a* : 0 ou plusieurs a

a? : 0 ou 1 a

a{n, m} : minimum n occurrences de a consecutives, maximum m occurrences de aconsecutives

a{n} : exactement n occurrences de a consecutives

a{n, } : minimum n occurrences de a consecutives

print(re.findall("ba?c", "bacbaacbc"))# affiche Banjour tout le monde

print(re.findall("ba{0,1}c", "bacbaacbc"))# affiche Banjour tout le monde

H & H: Research and Training 14 / 20

Page 16: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

split

Contraintes exprimees avec les expressions regulieres

a+ : 1 ou plusieurs a

a* : 0 ou plusieurs a

a? : 0 ou 1 a

a{n, m} : minimum n occurrences de a consecutives, maximum m occurrences de aconsecutives

a{n} : exactement n occurrences de a consecutives

a{n, } : minimum n occurrences de a consecutives

print(re.findall("ba?c", "bacbaacbc"))# affiche Banjour tout le monde

print(re.findall("ba{0,1}c", "bacbaacbc"))# affiche Banjour tout le monde

H & H: Research and Training 14 / 20

Page 17: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Contraintes exprimees avec les expressions regulieres

a | b : a ou b

ˆ : commence par

$ : se termine par

() : le groupe

a(?!b) : a non suivi de b

a(?=b) : a suivi de b

(?<!a)b : b non precede par a

H & H: Research and Training 15 / 20

Page 18: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Contraintes exprimees avec les expressions regulieres

. : n’importe quel caractere

\d : un chiffre

\D : tout sauf un chiffre

\w : un caractere alphanumerique ou

\W : tout sauf un caractere alphanumerique

\t : un caractere de tabulation

\n : un caractere de retour a la ligne

\s : un espace

...

H & H: Research and Training 16 / 20

Page 19: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Contraintes exprimees avec les expressions regulieres

[a-z] : toutes les lettres entre a et z

[abcd] : a, b, c, ou d

[A-Za-z] : une lettre en majuscule ou en minuscule

[ˆa-d] : tout sauf a, b, c, et d

...

Pour utiliser un caractere reserve (ˆ, $...) dans une expressionreguliere, il faut le preceder par \

H & H: Research and Training 17 / 20

Page 20: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Contraintes exprimees avec les expressions regulieres

[a-z] : toutes les lettres entre a et z

[abcd] : a, b, c, ou d

[A-Za-z] : une lettre en majuscule ou en minuscule

[ˆa-d] : tout sauf a, b, c, et d

...

Pour utiliser un caractere reserve (ˆ, $...) dans une expressionreguliere, il faut le preceder par \

H & H: Research and Training 17 / 20

Page 21: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Exercice 1

Trouver une expression reguliere qui permet de determiner si unechaıne de caractere contient 3 occurrences (pas forcementconsecutives) de la sous-chaıne ab.

true pour abacccababcc

true pour abababccccab

false pour baaaaabaccccba

H & H: Research and Training 18 / 20

Page 22: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Exercice 2

Trouver une expression reguliere qui permet de determiner si unechaıne commence par la lettre a, se termine par la lettre b et pourchaque x suivi de y (pas forcement consecutives), il existe un z situeentre x et y.

true pour ab

true pour abxyb

true pour abxazyb

false pour abxuyb

false pour abxazyxyb

H & H: Research and Training 19 / 20

Page 23: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Exercice 3

Trouver une expression reguliere qui permet de determiner si unechaıne de caractere correspond a une adresse e-mail.

Exercice 4

Trouver une expression reguliere qui permet de determiner si unechaıne de caractere correspond a un numero de telephone francais.

H & H: Research and Training 20 / 20

Page 24: Python : expressions régulières · 2020. 8. 26. · Python Exercice 3 Trouver une expression reguli´ ere qui permet de d` eterminer si une´ chaˆıne de caract ere correspond`

c© Achref EL MOUELHI c©

Contraintes

Python

Exercice 3

Trouver une expression reguliere qui permet de determiner si unechaıne de caractere correspond a une adresse e-mail.

Exercice 4

Trouver une expression reguliere qui permet de determiner si unechaıne de caractere correspond a un numero de telephone francais.

H & H: Research and Training 20 / 20