Regex VBA

Table des matières

Ce tutoriel montrera comment utiliser Regex dans VBA.

Qu'est-ce que Regex ?

Regex signifie expression régulière. Une expression régulière est un modèle composé d'une séquence de caractères que vous pouvez utiliser pour trouver un modèle correspondant dans une autre chaîne. Pour utiliser Regex dans VBA, vous devez utiliser l'objet RegExp.

Un modèle tel que [A-C] peut être utilisé pour rechercher et faire correspondre une lettre majuscule de A à C dans une séquence. Les modèles Regex ont leur propre syntaxe et peuvent être construits à l'aide d'un caractère ou d'une séquence de caractères.

Caractères correspondants

Le tableau suivant montre la syntaxe qui vous permettra de construire des modèles Regex.

Syntaxe du modèle La description Exemple Correspondances trouvées
. Correspond à n'importe quel caractère sauf vbNewLine f.n fan, fon, f@n, fwn
[personnages] Correspond à n'importe quel caractère entre crochets[] [fn] Ne correspondrait qu'à « f » ou « n » dans le ventilateur
[^caractères] Correspond à tout caractère unique qui n'est pas entre crochets[] [^fn] Donc correspondrait à « j » dans « fjn »
[début Fin] Correspond à tout caractère faisant partie de la plage entre crochets[] [1-5] Correspondrait à « 4 » et « 5 » dans « 45 »
\w Correspond aux caractères alphanumériques et au trait de soulignement, mais pas au caractère espace \w Correspondrait à "c" dans ",c."
\W Correspond à tous les caractères non alphanumériques et au trait de soulignement \W Correspondrait à « @ » dans « bb@bb »
\s Correspond à n'importe quel caractère d'espace blanc tel que les espaces et les tabulations \s Correspondrait à « » dans « Ceci est »
\S Correspond à n'importe quel caractère d'espace non blanc \S Correspondrait à « T » et « h » dans « T h »
\ré Correspond à n'importe quel chiffre décimal \ré Correspondrait à « 7 » dans « a7h »
\RÉ Correspond à n'importe quel chiffre non décimal \RÉ Correspondrait à j dans "47j"
\ Échappe les caractères spéciaux qui vous permettent ensuite de les rechercher \. Correspondrait à "." dans "59.pQ"
\t Languette \t Correspondrait à un caractère de tabulation
\r Retour chariot \r Correspondrait à un retour chariot (vbCr)
\n vbNouvelleLigne(vbTab) \n Correspondrait à une nouvelle ligne

Quantificateurs

Vous pouvez utiliser des quantificateurs pour spécifier combien de fois vous souhaitez que le modèle corresponde à la chaîne.

Quantificateur La description Exemple Correspondances trouvées
* Correspond à zéro ou plusieurs occurrences fn*a fna, fa, fnna, fnnna, fnfnnna
+ Correspond à une ou plusieurs occurrences fn+a fna, fnna, fnfnna
? Correspond à zéro ou un fn? un fa, fna
{n} Correspond à « n » plusieurs fois d\W{4} Correspondrait à « d… ». dans "d… .&5hi"
{n,} Correspond au moins à « n » nombre de fois d\W{4,} Correspondrait à "d… .&" dans "d… .&5hi"
{n,m} Correspond entre n et m nombre de fois d\W{1,8} Correspondrait à "d… .&&&&" dans "d… .&&&&5hi"

Regroupement

Le regroupement ou la capture vous permet d'utiliser un modèle pour capturer et extraire une partie d'une chaîne. Ainsi, non seulement le motif correspond, mais la partie de la chaîne qui correspond au motif est capturée.

Modèle La description Exemple Matchs trouvés et capturés
(expression) Regroupe et capture le motif entre parenthèses (\W{4}) Regrouperait et capturerait « @@@@ » à partir de « 1@@@@1jlmba »

Comment utiliser Regex dans VBA

Pour utiliser Regex dans VBA, vous devez d'abord définir la référence dans l'éditeur VBE. Dans l'éditeur VBE, accédez à Outils > Références > Expressions régulières Microsoft VBScript.

Voici les propriétés de l'objet RegExp :

  • Modèle - Le modèle que vous allez utiliser pour faire correspondre la chaîne.
  • Ignorer la casse - Si True, la correspondance ignore la casse des lettres.
  • Global - Si True, alors toutes les correspondances du motif dans la chaîne sont trouvées. Si False, seule la première correspondance est trouvée.
  • MultiLigne - Si True, la correspondance de modèle se produit entre les sauts de ligne.

Voici les méthodes de l'objet RegExp :

  • Test - Recherche un motif dans une chaîne et renvoie True si une correspondance est trouvée.
  • Remplacer - Remplace les occurrences du motif par la chaîne de remplacement.
  • Exécuter - Renvoie les correspondances du motif par rapport à la chaîne.

Test d'un modèle pour une correspondance avec une chaîne

Vous pouvez utiliser la méthode Test pour vérifier si un modèle correspond à une séquence dans la chaîne d'entrée. Le résultat est True si une correspondance est trouvée. Le code suivant vous montrera comment tester un modèle par rapport à une chaîne :

12345678910111213 Sub RegexTestingAPattern()Dim stringOne As StringDim regexOne en tant qu'objetDéfinir regexOne = New RegExpregexOne.Pattern = "f… .a"chaîneUn = "000111fjo88a8"Debug.Print regexOne.Test(stringOne)Fin du sous-marin

Le résultat est:

Remplacer un motif dans une chaîne

Vous pouvez utiliser la méthode Replace pour remplacer la première instance d'un modèle correspondant dans une chaîne ou toutes les instances d'un modèle correspondant dans une chaîne. Si Global est défini sur False, seule la première instance est remplacée. Le code suivant vous montrera comment remplacer un motif dans une chaîne :

1234567891011 Sub RegexReplacingAPattern()Dim stringOne As StringDim regexOne en tant qu'objetDéfinir regexOne = New RegExpregexOne.Pattern = "Ceci est le numéro"regexOne.Global = FalsestringOne = "Ceci est le numéro 718901"Debug.Print regexOne.Replace(stringOne, "C'est le nouveau numéro")Fin du sous-marin

Le résultat est:

Pour remplacer uniquement la partie numérique de la chaîne utilisée ci-dessus, vous utiliseriez le code suivant :

1234567891011 Sub RegexReplacingAPattern()Dim stringOne As StringDim regexOne en tant qu'objetDéfinir regexOne = New RegExpregexOne.Pattern = "[^\D]+"regexOne.Global = FalsestringOne = "Ceci est le numéro 718901"Debug.Print regexOne.Replace(stringOne, "777192")Fin du sous-marin

Le résultat est:

Pour remplacer chaque instance d'un certain modèle dans une chaîne, vous devez définir la valeur globale sur True. Le code suivant vous montre comment remplacer chaque instance de -A1289C- dans la chaîne :

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern()Dim stringOne As StringDim regexOne en tant qu'objetDéfinir regexOne = New RegExpregexOne.Pattern = "\W\A\d+C\W"regexOne.Global = TruechaîneUn = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace(stringOne, "IJK")Fin du sous-marin

Faire correspondre et afficher un motif dans une chaîne

Vous pouvez utiliser la méthode Execute pour faire correspondre une ou toutes les instances d'un modèle dans une chaîne. Le code suivant vous montre comment faire correspondre et afficher toutes les instances du modèle à partir de la chaîne :

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern()Dim stringOne As StringDim regexOne en tant qu'objetDéfinir regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasechaîneUn = "ABC-A1289C-ADC-A1289C-AJC"Définissez theMatches = regexOne.Execute(stringOne)Pour chaque match dans les matchsDebug.Print Match.ValueProchainFin du sous-marin

Le résultat est:

Disons que nous voulions seulement faire correspondre -ADC- à partir de la chaîne ci-dessus. Le code suivant montre comment faire correspondre et afficher uniquement -ADC- à partir de la chaîne :

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern()Dim stringOne As StringDim regexOne en tant qu'objetDéfinir regexOne = New RegExpregexOne.Pattern = "\-\A.C\-"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasechaîneUn = "ABC-A1289C-ADC-A1289C-AEC"Définissez theMatches = regexOne.Execute(stringOne)Pour chaque match dans les matchsDebug.Print Match.ValueProchainFin du sous-marin

Regex peut prendre un certain temps à apprendre, mais c'est un outil extrêmement puissant pour identifier/manipuler des chaînes de texte. Il est également largement utilisé dans les langages de programmation.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave