Fonction Excel : REGEX.EXTRAIRE
La fonction REGEX.EXTRAIRE extrait une ou plusieurs parties d'un texte en fonction d'une expression régulière.
Utilisation :
=REGEX.EXTRAIRE(texte; regex)
ou :
=REGEX.EXTRAIRE(texte; regex; retour, casse)
Extraire le premier mot trouvé
La fonction REGEX.EXTRAIRE retourne ici le premier mot trouvé parmi les 2 possibilités ("amusant" ou "terrifiant") :
=REGEX.EXTRAIRE(A2;"amusant|terrifiant")

Les arguments facultatifs
Le troisième argument vous permet de préciser le type de retour attendu :
- 0 : Retourner la première chaîne trouvée
- 1 : Retourner toutes les chaînes trouvées sous forme de tableau
- 2 : Retourner des groupes de capture sous forme de tableau (pour utiliser cette option vous devez utiliser des parenthèses dans la regex pour définir les éléments à capturer)
Par exemple, si on entre la valeur 1 au dernier exemple, celui-ci retourne un tableau horizontal avec toutes les correspondances trouvées :
=REGEX.EXTRAIRE(A2;"amusant|terrifiant";1)

Si vous ne souhaitez pas tenir compte de la casse, entrez la valeur 1 en quatrième argument (par défaut la valeur est 0, elle tient compte de la casse).
Extraire une référence
La fonction REGEX.EXTRAIRE retourne ici une partie du numéro de référence correspondant à l'expression "[A-Z]\d{2,}" (soit une lettre en majuscule suivie de 2 chiffres ou plus) :
=REGEX.EXTRAIRE(A2;"[A-Z]\d{2,}")

Extraire un nombre
La regex "\d+" va extraire ici tous les chiffres jusqu'à tomber sur un caractère qui n'en est pas un :
=REGEX.EXTRAIRE(A2;"\d+")

Si vous entrez la valeur 1 en troisième argument, vous obtiendrez un tableau horizontal avec les différents nombres extraits :
=REGEX.EXTRAIRE(A2;"\d+";1)

Extraire à la fin
Pour extraire les chiffres à la fin du texte, ajoutez un $ à la fin de la regex :
=REGEX.EXTRAIRE(A2;"\d*$")

Extraire plusieurs parties
Pour extraire différents groupes de chiffres, ajoutez des parenthèses sur chaque partie du texte à extraire. Dans ce cas nous allons par exemple extraire uniquement les groupes 2 et 3 :
=REGEX.EXTRAIRE(A2;"\d+-(\d+)-(\d+)";2)

Vous pouvez voir ici que les 2 groupes à capturer ont été mis entre () et que la valeur 2 a été passée en troisième argument de la fonction pour tenir compte uniquement des groupes à capturer.
Extraction complexe
Pour extraire une valeur dans des données qui ne sont pas régulières du tout, recherchez tout d'abord une constante (l'objectif ici est d'extraire le prix) :

Vous pouvez voir que le prix est toujours précédé du mot "prix".
La formule suivante permet d'extraire le prix :
=REGEX.EXTRAIRE(A2;"Prix\W*(\d+(?:\.\d{1,2})?)";2;1)
Pour mieux comprendre :
- Prix : Recherche de "Prix" (notez que le quatrième argument est à 1, la casse est donc ignorée)
- \W* : 0, 1 ou plusieurs caractères non alphanumériques
- ( : Parenthèse d'ouverture pour capturer le prix (+ troisième argument à 2)
- \d+ : Un ou plusieurs chiffres (la première partie du prix)
- (?: : Le séparateur et la décimale ne sont pas toujours présents, il faut donc grouper le séparateur et la décimale entre parenthèses (et préciser plus tard qu'il peut y en avoir 0 ou 1) mais pour éviter que la fonction ne retourne aussi la valeur de ces parenthèses, "?:" a été ajouté pour préciser qu'il s'agit de parenthèses non capturantes.
- \.\d{1,2} : Un point et 1 ou 2 chiffres
- )? : Parenthèse de fermeture de la décimale en indiquant qu'il peut y en avoir 0 ou 1
- ) : Parenthèse de fermeture du prix

Une autre option pour ne pas avoir à s'inquiéter des parenthèses capturantes (et laisser le troisième argument à sa valeur par défaut) consiste à utiliser une assertion :
=REGEX.EXTRAIRE(A2;"(?<=Prix\W{0,3})\d+(\.\d{1,2})?";0;1)

Référence arrière
La formule suivante va rechercher le premier nombre présent 2 fois de suite dans la liste de nombres en utilisant une référence arrière :
=REGEX.EXTRAIRE(A2;"(\d+)\W+\1";2)
