Outils pour utilisateurs

Outils du site


enseignement:lea:cours:linguistique:appli-corpus:poly-regexp

Expressions régulières étendues

Introduction

Lors de la manipulation de textes, le besoin de rechercher un motif (pattern matching) s'impose assez vite.

Pour ces manipulations, nous ne manipulerons que du texte. Nous avons à notre disposition les expressions régulières (ou expressions rationnelles), communément abrégé en « regexp ». Il existe plusieurs syntaxes et nous allons nous concentrer sur les regexp POSIX et dirons quelques mots sur les regexp Perl.

Un motif peut être par exemple la chaîne de caractères a la fin pour repérer la faute. Ce peut aussi être en <truc>ant pour repérer les participes présent. Évidemment, on peut faire beaucoup plus !

Et un texte ? Un texte, est constitué d'une suite de caractères, qu'il s'agisse d'une page Web, d'un polycopié, de la retranscription d'un chat ou d'une œuvre de littérature. Les caractères qui nous intéressent sont les lettres de l'alphabet, les chiffres et signes de ponctuation. Ces caractères peuvent aussi être les fins de lignes, espaces, tabulations horizontales et verticales, sauts de page et retour chariot (voir à ce sujet Caractères de contrôle utiles).

Regexp POSIX

Exemples

Si on cherche les participes présent, les candidats sont les mots finissant (sic !) par “ant”.

  1. Première idée : chercher la chaîne “ant”. On récupère alors beaucoup de mots dont nos participes.
  2. On peut faire mieux : chercher « tous les mots contenant “ant” » ; on cherche alors “.*ant”. Le “.” matche tout caractère imprimable (hormis la fin de ligne), “*” indique “ce qui précède, zéro fois ou plus”. “.*ant” matche donc les chaînes qui comportent 'ant' et éventuellement un caractère avant :
    • faisant
    • enseignants
  3. On peut faire encore mieux : chercher « toutes les chaînes contenant notre suffixe suivi d'une espace ou des caractères de ponctuation “,”, “.” et “)” » 1). On cherche donc “.*ant[ ,.)]”. Ici les crochets “[” et “]” définissent une classe de caractères, classe définie comme étant l'un des trois signes de ponctuation et l'espace.
  4. Enfin, on peut chercher les mots finissants par “ant” : “.+ant\>”. “\>” marque la fin d'un mot (de même, “\<” marque le début d'un mot) et “+” indique que le motif précédent est présent au moins une fois.

Vous pouvez utiliser http://wall.eila.univ-paris-diderot.fr/dyn/grep.cgi pour tester.

Synthèse

On vient de voir que dans une regexp, les caractères ou chaînes littéraux sont indiqués tels quel. Nous avons surtout vu que :

  • tout caractère imprimable est matché par “.”
  • que le motif précédent est matché zéro fois ou plus par “*”
  • que le motif précédent est matché une fois ou plus par “+”
  • que les débuts (resp. fins) de « mot » sont marqués par “\<” (resp. “\>”)
  • que des classes de caractères peuvent être définies par “[…]”

Interrogeons-nous maintenant sur les usages du mot espace. Il peut être masculin dans la langue générale ou féminin en typographie. Pour simplifier, on pourrait chercher les occurrences dont le genre est marqué par l'article indéfini : “\<un(|e) (|\<.*\> )espace\>”.

Cette expression matche :

  • une espace
  • un large espace

Ici on a utilisé la possibilité d'indiquer des alternatives, marquées par (…|…).

Syntaxe

Regexp Signification
A Lettre A
[a-z] Lettres minuscules de a à z
[A-Ea-e] Lettres de a à e, majuscules et minuscules
[0-9] Chiffres
[^aeiou] Tout caractère sauf une voyelle minuscule
^ Début de ligne
$ Fin de ligne
ab* a suivi de zéro, un ou plusieurs b
ab+ a suivi d'un ou plusieurs b
b{2,4} entre 2 et 4 occurences de b
b? zéro ou une occurrence de b
a|b a ou b

Pour matcher les caractères “.”, “*”, “?”, “+”, “^”, “$” il faut les échapper par un “\” : “eila\.univ-paris-diderot\.fr” matche notre nom de domaine.

Références

On peut appeler un motif déjà matché : encadrer le premier par des “(” et “)” et l'appeler avec “\N”N est un nombre (entier !) renseignant le motif à rappeler. Par exemple, pour trouver les consonnes doubles : “([a-z])\1”.

De même, on peut chercher les palindromes de 5 lettres : “(.)(.).\2\1” ; on matche radar et sexes par exemple.

Les parenthèses permettent donc de marquer un motif et de grouper des alternatives.

Exercices

Utiliser le paragraphe de l'introduction pour :

  1. chercher toutes les occurrences de et
  2. chercher toutes les occurrences de et et est
  3. chercher toutes les occurrences de l'article indéfini singulier
  4. chercher les mots au pluriel
  5. chercher les mots contenant “exp” et suivi d'un autre mot en minuscule ; “exp(|ression(|s)) [a-z]+” ne matche pas tout, pourquoi ?
  6. chercher toutes les occurrences de est suivi d'un participe passé ; commencer par les verbes du premier groupe ;-)
  7. chercher les mots contenant une consonne double commençant par une majuscule

Perl

La documentation est là : rexep Perl.

Le langage Perl étend les expressions régulières. Par exemple on dispose des classes :

  • “\w” pour les caractères des mots et “\W” pour le complément,
  • “\d” pour les chiffres et “\D” pour le complément,
  • “\s” pour les caractères d'espacement, “\S” pour le complément

et des séquences :

  • “\b” bordure d'un mot,

WALL

Bibliographie

1) Valable si les règles de typographie française sont respectées, les caractères de ponctuation haute “;”, “!”, “?”, “»” et “:” étant précédés d'une espace fine ; voir à ce sujet Règles élémentaires de typographie française.
2) ISBN-10: 0-596-52812-4
3) ISBN-10: 0-596-51427-1
enseignement/lea/cours/linguistique/appli-corpus/poly-regexp.txt · Dernière modification: 2014/06/24 18:02 (modification externe)