Les expressions régulières ("regex" pour les intimes) est une syntaxe qui permet de décrire et identifier un ensemble de chaîne de caractères possibles. Quand on gère au quotidien des catalogues, inventaires ou bases de données, elles peuvent servir de super "rechercher / remplacer par" très utile pour normaliser et corriger quelques coquilles ou en masse.

40 regex emailAu lieu de rechercher un mot strict (par exemple "chat"), les expressions régulières permettent de chercher des chaînes de caractères (par exemple 4 lettres, ou "c" suivi de 3 lettres, ou "c" + 2 lettres + "t"...), et si besoin de les modifier en mémorisant les valeurs initiales.

Quelques cas d'usages au quotidien quand on travaille sur des milliers de lignes :

  • traquer le point final (absent ou présent, selon les choix), en fin de ligne / balise
  • traquer la minuscule qui subsiste en début de champ / balise
  • chercher l'année ou la date mal écrite (par exemple trois ou cinq chiffres qui se suivent)
  • repérer des coquilles d'orthographes (les suivi d'un mot sans s final : les ([a-z]{3,})([a-r|t-x]) )
  • etc.

Voir aussi l'article "Expression régulière" sur Wikipédia

40 notepad regexOù les utiliser ?

  • dans les logiciels de traitement de texte (Writer, Word)

De manière plus ou moins poussée selon les logiciels, à partir de la fonction Remplacer par (control + H) et en activant l'option.

 

Aussi bien dans les filtres de texte que les transformations de contenu : value.replace(/^majuscule/,"Majuscule")

 

40 openrefine regex1

 

Pense-bête

Caractères typographiques

Chiffre : [0-9]

Lettre : [a-z]

N'importe quel caractère : (point = joker)

Tout sauf les espaces : \S

Tout sauf un chiffre : \D

Tout sauf un caractère alpha-numérique : \W

 

Groupe de caractères

Toutes les minuscules : [a-z]

Toutes les majuscules jusqu'à L : [A-L]

Toutes les lettres quelle que soit leur casse : [a-zA-Z] (ou \W)

Exclure une chaîne de caractères : gr[^oai] (chaîne de caractères contenant gr suivi de tout sauf o, a ou i)

 

Mise en forme du texte et position

Espace : \s

Tabulation : \t

Sauf de ligne : \n

Saut de paragraphe : \r (ou $ dans LibreOffice)

Début d'une ligne : ^

Fin d'une ligne : $

Caractère d'échappement : \ (quand on veut que . signifie "point", que / signifie "slash", que ( ou ) signifie "parenthèse" , sans qu'il soit interprété comme un élément de syntaxe)

 

Quantificateurs

Une quantité de caractères précise : [0-9]{4} (quatre chiffres... soit une année)

Une quantité variable (mini,maxi) : [a-z]{4,8} (entre 4 et 8 lettres minuscules qui se suivent)

Une quantité variable : [A-Z]{4,} (au moins 4 lettres majuscules qui se suivent)

N'importe quelle quantité : *

 

Variables

Il est possible de rechercher une chaîne de caractères, la mémoriser et la réutiliser :

(chaîne-recherchée) > $1

je recherche toutes les dates sous le format JJ/MM/AAAA pour les transformer en AAAA-MM-JJ

rechercher ([0-9]{2})\/([0-9]{2})\/([0-9]{4}) > remplacer par : $3-$2-$1 

 

(Mes) Transformations courantes

Faire une ébauche de structure CSV sur un contenu texte peu structuré : rechercher des séparateurs communs (caractère(s) qui se suivent, mots, ponctuation récurrente) et remplacer par : \t (tabulation)

Traquer les minuscules en début de cellule / balise : <unittitle.*>[a-z]

Chercher les dates cassées : [0-9]{5} ou [0-9]{3}

Changer l'affichage d'une date : rechercher ([0-9]{2})\/([0-9]{2})\/([0-9]{4}) > remplacer par $3-$2-$1 (tout de suite c'est mieux pour trier)

Chercher les points absents en fin de ligne : [^\.]$ (ou de balise [^\.]< )

Chercher les points présents en fin de ligne : \.$ (ou de balise \.< )

Mettre entre parenthèses toutes les années dans une balise (en utilisant le xpath) : rechercher : ([0-9]{4}) > remplacer par ($1)

Recherche de potentiels mots doublés (correspondance).{1,}(correspondance)

Transformer "NOM Prénom" en "NOM, Prénom" : rechercher ([A-Z][A-Z]) ([A-Z][a-z]) > remplacer par $1, $2

 

Par contre, les regex ne feront pas de miracle côté casse. E, É, e et é sont quatre caractères différents. Si les accents n'existent pas en majuscules, ils n'existeront pas en minuscule. Il reste toujours les recherches en masse des mots récurrents possibles (état, église, école...) et le copier-coller dans un outil de traitement de texte avec correction orthographique pour repérer rapidement ce qui est souligné en rouge.

 

Pour aller plus loin

 

Bonus archivistico-historique : traiter les exposants dans Writer (Libre Office)

(contribution d'Agnès VBB)

Objectif : mettre en exposant les dizaines (ou plus) de e pour écrire joliment XVIIe siècle

  • Rechercher : (XI{0,1}V{0,1}I{0,3}e) en cochant "respecter la casse" (ça évite de transformer annexe, taxe, etc) et remplacer par $1 en sélectionner Format "exposant"

 

40 regex exposant 1

"XVIIe" est entièrement en exposant mais pas de panique, c'est normal !

40 regex exposant 2

  • Rechercher (XI{0,1}V{0,1}I{0,3}) en sélectionnant Format "exposant" et remplacer par $1 avec Format "normal"

 40 regex exposant 3

 Et voici des siècles bien écrits !

40 regex exposant 2

Pour ceux qui cherchent les XIXe, XXe ou XXIe s., il suffit de modifier la chaîne de caractère recherchée.


Comments est propulsé par CComment

À propos

Le numérique c’est fantastique (et non dramatique), surtout quand on travaille dans le domaine du patrimoine.

« C’est compliqué… ». « Je n’ose pas… ». « Je ne sais pas comment faire… »

Nul besoin d’années de code pour se simplifier la vie et le boulot sur un ordinateur. Archiviste et formatrice sur les outils et la médiation numérique, j'ai créé en 2015 ce blog pour partager et diffuser auprès des acteurs des archives et du patrimoine des tutoriels et des outils simples, pratiques et gratuits.

Idées, requêtes, questions, contributions sont les bienvenues.

Maïwenn Bourdic