Taille de police :

×

Lecture de la page :

Lire Test2

Des fonctions utilisant les expressions régulières !

0
(0)

Windows : Disponible à partir de la version 2406 (build 17715.20000) ou ultérieure.

Maj 08/2024 : Ajout des expressions régulières aux fonctions RECHERCHEX et EQUIVX (Windows: Version 2408 (Build 17931.20000)).

Microsoft a annoncé 3 nouvelles fonctions permettant d'exploiter la puissance des expressions régulières (voir Expression régulière — Wikipédia (wikipedia.org)).

Pour résumer : Une expression régulière est une chaîne de caractères (appelée motif ou pattern en Anglais) qui décrit avec des codes les caractéristiques d'une chaîne (une sorte de portrait-robot).

Ces motifs pouvant être très complexe, on peut demander de l'aide aux AI mais penser à bien contrôler l'exactitude des réponses fournies qui sont parfois incomplètes voir fausses 😔.

On peut facilement tester nos motifs sur différents sites comme par exemple regex101: build, test, and debug regex.

Les 3 nouvelles fonctions proposées par Microsoft sont :

  • REGEXTEST : Vérifie la présence d'une portion de texte, dans une chaîne, correspondant au motif de texte fourni.
  • REGEXEXTRACT : Renvoie les sous chaînes de texte qui correspondent au motif fourni.
  • REGEXREPLACE : Recherche les sous chaînes de texte qui correspondent au motif fourni, puis les remplace par une chaîne de remplacement.

Mémento des principales syntaxes des expressions régulières

Attention : j'ai ajouté des espaces entre les caractères des motifs pour améliorer la lisibilité.

  • Les ensemble de caractères [ ] (classes).
    • " [ a e i o u y x ] " : Toutes les voyelles et "x" (OU avec le pipe " a | e | i | o | u | y | x ").
    • " [ 0 - 8 ] " : Tous chiffres entre 0 et 8.
    • " [ e - t ] " : Tous caractère de "e" à "t" (Attention : "[ - e t ]" c'est "tiret "-" ou "e" ou "t").
    • " [ E - T ] " : Tous caractère de "E" à "T" (la casse est prise en compte !).
    • " [ ^ e - t ] " : Tous caractère SAUF les caractères "e" à "t".
Excel Regex : Ensemble de caractères
  • Les raccourcis d'ensemble (La version en capital/MAJUSCULE renvoie le complément = l'inverse).
    • " \ d " : Les chiffres de 0 à 9 (" [ 0 - 9 ] + ").
    • " \ D " : Pas un chiffres (" [ ^ 0 - 9 ] + ").
    • " \ w " : Les caractères alphanumériques et "_" (" [ a - z A - Z 0 - 9 _ ] ").
      • Les caractères accentués sont bien inclus.
    • " \ W " : Pas un caractère alphanumérique et pas "_" (" [ ^ a - z A - Z 0 - 9 _ ] ").
    • " \ s " : Les caractères "non imprimables" (Espace, Espace insécable (Alt+0160), tabulation, retour à la ligne, retour chariot, saut de page...).
      <=>" [\r\n\t\f\v] ".
    • " \ S " : Pas un caractère "non imprimables".
Excel Regex : Raccourcis ensemble de caractères
  • Caractère.
    • " . " : Tous caractères (Piège : Lors de la saisie de 3 "." consécutifs, ils peuvent être remplacés par le caractère unique Points de suspension "..." par l'outil Correction automatique !).
    • " a " : Le caractère "a".
    • " \ t " : Le caractère Tabulation.
    • " \ n " : Le caractère Retour/saut à la ligne.
    • " \ N " : Pas le caractère Retour/saut à la ligne.
    • " \ r " : Le caractère Retour chariot.
    • " \ f " : Le caractère Saut de page.
    • " \ h " : Un caractère "vide" (Espace, Espace insécable (Alt+0160), tabulation).
    • " \ H " : Pas un caractère "vide".
    • " \ " Caractère d'échappement (pour rechercher un des caractères suivant ^ $ \ | { } [ ] ( ) ? + * . ) # ! <=> " a \ + " : chaîne " a+ " et non un ou plusieurs "a".
  • Condition de position dans la chaîne.
    • " ^ " : Normalement Début de ligne mais semble être Début de chaîne (" \ A ") .
    • " $ " : Fin de ligne.
    • " \ b " : Début et fin de mot.
    • " \ B " : Pas en début et fin de mot.
    • " \ A " : Début de chaîne.
    • " \ Z " ou " \ z " : Fin de chaîne.
Excel Regex : Position des caractères
  • Les quantificateurs de caractères
    • " a { 3 } " : 3 fois le caractère "a" ("aaa").
    • " a { 2 , 4 } " : Entre 2 et 4 caractères "a" successifs ("aa" ou "aaa" ou "aaaa").
    • " a { 2 , } " : Au moins 2 caractères "a" successifs ("aa" ou "aaa" ou "aaaa" ou ...).
    • " a ? " : Zéro ou un "a" ( =" a { , 1 } ").
    • " a * " : Zéro ou plusieurs "a" ( = " a { 0 , } ").
    • " a + " : Un ou plusieurs "a" ( = " a { 1 , } ").

Une petite finesse à voir :

  • Comportement "Greedy" (Gourmand)
    • Comportement par défaut des quantificateurs "*" et "+".
    • Il cherche à capturer la plus longue chaîne de caractères possible qui correspond au motif (prend le maximum).
    • Exemple : "Au début le finaud biffin ri" => "début.*fin" => "début le finaud biffin".
  • Comportement "Lazy"
    • Il cherche alors à capturer la chaîne de caractères la plus courte possible qui correspond au motif (prend le minimum).
    • Pour rendre un quantificateur "Lazy", on ajoute un point d'interrogation (?) juste après lui ("*?", "+?").
    • Exemple : "Au début le finaud biffin ri" => "début.*?fin" => "début le fin".
  • Les groupements ( )
    Identifier une portion afin d'étendre ou restreindre son application ou afin d'y faire référence.
    • " ( a | b ) c " : "ac" ou "bc".
    • " a( 0 1 ) + a " : "a01a" ou "a0101a" ou "a010101a"...
    • "( ) \ 1 " : Référence au 1er regroupement.
Excel Regex : Groupement
  • Les Lookarounds testent la présence ou l’absence d’un motif juste avant ou juste après le motif cherché.
    • " a ( ? = b ) " : Les " a " suivis d'un "b".
    • " a ( ? ! b ) " : Les " a " non suivis d'un "b".
    • " ( ? < = b ) a " ou " b \ K a " : Les " a " qui succède à un "b".
    • " b \ K a " : Autre solution moins souple pour les " a " qui succède à un "b" ("Cherche "b" comme position de départ puis commence la recherche de "a").
Excel Regex : Lookarounds
  • Mode récursif
    • " a ( ? R ) ? b " : Une chaîne de "a" suivit d'autant de "b" (ab, aabb, aaabbb...).
      ( ? R ) reprend le motif en entier.
      <=> " a ( a ( a....) ? b ) ? b"
    • " a ( ? 0 ) ? b " : idem
    • " a \ g < 0 > ? z " : idem
      \g<0> : Référence arrière au groupe de capture 0 (sous chaîne qui correspond au motif jusqu’à ce point).
  • Codage Unicode
    • " \ x { 221E } " : Le caractère ayant le code 221E (∞).
    • " \ p { N } " : La catégorie des chiffres (comme " \ d ").
    • " \ P { N } " : Pas de la catégorie des chiffres (comme " \ D ").
    • " \ p { L } " : La catégorie des lettres.
    • " \ P { L } " : Pas de la catégorie des lettres.
    • " \ p { Lu } " : La catégorie des lettres capitales ("majuscule", u pour upper).
    • " \ P { Lu } " : Pas de la catégorie des lettres capitales.
    • " \ p { Ll } " : La catégorie des lettres minuscules ( l pour lower).
    • " \ P { Ll } " : Pas de la catégorie des lettres minuscules.
    • " \ p { P } " : Catégorie des signes de ponctuations (virgule, guillemet...).
    • Remarques :
      • " \ w " = [ \p{Ll} \p{Lu} \p{Lt} \p{Lo} \p{Lm} \p{Mn} \p{Nd} \p{Pc} ]
      • J'ai omis plusieurs codes me semblant trop spécifiques.
        Exemple : \p{Lt} pour les caractères de casse de titre comme Dž (U01C5).
        Pour Lt, Lo, Lm, Mn, Me... voir Catégories de caractères Unicode (compart.com)
  • Sensibilité à la casse
    Les fonctions Excel possèdent directement un argument permettant de gérer ce paramètre globalement mais il est possible de le faire via des flags (inline)
    • " (?i) " : Active l'insensibilité pour la suite du pattern.
      Exemple :
      • "(?i)Vente" correspond à "vente", "VENTE", "Vente", "VeNtE".
    • " (?-i)" : Désactive l'insensibilité pour la suite du pattern.
      Exemple :
      • "(?i)v(?-i)ente" correspond à "vente", "Vente" (peut être que "[Vv]ente" aurait suffit 😁?).

Je pense que c'est déjà suffisant pour un résumé 😁.

Exemples de motifs :

Attention : les motifs trouvés sur internet sous souvent plus ou moins complet/précis (oublie de cas particuliers).

  • Carte de crédits (trouvées sur internet et non vérifiées).
    • Visa : " ^4[0-9]{12}(?:[0-9]{3})?$ "
    • MasterCArd : " ^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$ "
    • American Express : " ^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$ "
  • Adresse mail
    • Versions simples (trouvées sur internet et non vérifiées)
      • "^[\w.=-]+@[\w.-]+.[\w]{2,64}$" (Expressions régulières pour débutants (netwrix.fr)).
      • "^([\w-!#$%&'+/=?^{|}~.]+)@[\w\-!#$%&'*+/=?^_{|}~.]+(.[\w-!#$%&'+/=?^`{|}~.]+)*(.[a-z]{2,64})$".
      • Il semble qu'il soit impossible de générer une expression répondant parfaitement aux normes et que celle s'en approchant sont complexes et demandent beaucoup de ressources systèmes.

  • Une plage IP de l'IP 192.168.11.0 à 192.168.12.255 : " 192\.168\.(11|12)\..* " (version simple sans contrôle de la validité de la dernière plage).
  • Points absents en fin de ligne : " [^.]$ "

Fonction REGEXTEST

Rôle

Vérifier la présence d'une portion de texte dans une chaîne, correspondante à un motif de texte, en renvoyant TRUE ou FALSE.

Utilisations

  • Avec la fonction FILTRE.
  • Avec l'outil Mise en forme conditionnelle.
  • Avec l'outil Validation de données.

Syntaxe

=REGEXTEST( text ; pattern ; [case_sensitivity] )

Arguments

  • Text : Texte ou cellule à tester.
  • Pattern : Motif/expression régulière correspondant au texte à chercher dans Text.
  • case_sensitivity :
    • [ 0 ] : Valeur par défaut, différencie les caractères en capital (MAJUSCULES) des caractères minuscules.
    • 1 : Pas de différence entre caractères capital et caractères minuscules.

Exemples

Est-ce la cellule B5 contient un chiffre ?

B5 = "Les 3 chats"
=REGEXTEST( B5 ; "\d" ) => VRAI

B5 = "Les trois chats"
=REGEXTEST( B5 ; "\d" ) => FAUX

Mise en œuvre avec la fonction FILTRE et dans une mise en forme conditionnelle.

Excel Regex : Exemple REGEXTEST

Fonction REGEXEXTRACT

Rôle

Extraire une ou des portions de texte, dans une chaîne, correspondant à un motif de texte fourni. Si aucune correspondance n'est trouvée la fonction renvoie #N/A.

Syntaxe

=REGEXEXTRACT( text; pattern ; [return_mode] ; [case_sensitivity] )

Argument spécifique

  • return_mode : Type/nombre de valeurs retournées.
    • [ 0 ] : Valeur par défaut, 1ere occurrence.
    • 1 : Tableau de toutes les occurrences.
    • 2 : Tableau des groupes de la 1ère occurrence.

Exemple 1 (return_mode à 0 et à 1)

Décomposer un texte par mots.

=REGEXEXTRACT( "Un beau chat" ; "\b\S+" ; 0 ) => "Un"

=REGEXEXTRACT( "Un beau chat" ; "\b\S+" ; 1 ) 
=> Une table dynamique de 3 lignes contenant
"Un"
"beau"
"chat"

Exemple 2 (return_mode à 0 et à 2)

Renvoyer le texte entre les guillemets.

B5 = "Le "beau" chien"

=REGEXEXTRACT( B5 ; """.*""" ; 0 ) => ""beau"" (Les guillemets sont renvoyés)

=REGEXEXTRACT( B5 ; """(.*)""" ; 2 ) => "beau" (Texte sans guillemets)

Fonction REGEXREPLACE

Rôle

Remplacer une ou des portions de texte, dans une chaîne, correspondant à un motif de texte par une autre chaîne de texte. Si aucune correspondance n'est trouvée la fonction renvoie #N/A.

Syntaxe

=REGEXREPLACE( text; pattern ; replacement ; [occurrence] ; [case_sensitivity] )

Arguments spécifiques

  • replacement : Texte de remplacement ou référence au groupe de capture.
  • occurrence :
    • [ 0 ] : Valeur par défaut, toutes les instances trouvées.
    • 1, 2, 3 .... la 1ere, 2eme, 3eme ... instance à partir du début.
    • -1, -2, -3 .... la 1ere, 2eme, 3eme ... instance à partir de la fin.

Exemple 1

Supprimer les répétitions.

=REGEXREPLACE("Il fait fait beau ce ce matin";"\b(\w+)\s+\1\b";"$1") => "Il fait beau ce matin"

Exemple 2

Inverser des noms (en capitales) et le/les prénoms.

=REGEXREPLACE("DUPONT Jean Luc";"([A-Z]+)\s(.*)";"$2 $1") => "Jean Luc DUPONT"

Intégration à RECHERCHEX et EQUIVX

Un nouveau mode de correspondance a été ajouté à ces fonctions permettant l'exploitation des expressions régulières.

Excel Regex : Utilisation des expressions régulières avec les fonctions EQUIVX er RECHERCHEX

Exemples d'utilisation

Excel Regex : Utilisation des expressions régulières avec les fonctions EQUIVX er RECHERCHEX

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 0 / 5. Nombre de votes : 0

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *