Table des matières
Avez-vous déjà pensé à la puissance d'Excel si quelqu'un pouvait enrichir sa boîte à outils avec des expressions régulières ? Nous n'avons pas seulement pensé à cela, mais nous y avons travaillé :) Et maintenant, vous pouvez ajouter cette merveilleuse fonction RegEx à vos propres classeurs et effacer les sous-chaînes correspondant à un modèle en un rien de temps !
La semaine dernière, nous avons vu comment utiliser les expressions régulières pour remplacer des chaînes de caractères dans Excel. Pour ce faire, nous avons créé une fonction Regex Replace personnalisée. Il s'est avéré que la fonction va au-delà de son utilisation première et peut non seulement remplacer des chaînes de caractères mais aussi les supprimer. Comment est-ce possible ? En termes d'Excel, supprimer une valeur n'est rien d'autre que la remplacer par une chaîne vide, ce que notre fonction Regex esttrès bien !
Fonction VBA RegExp pour supprimer les sous-chaînes dans Excel
Comme nous le savons tous, les expressions régulières ne sont pas prises en charge par Excel par défaut. Pour les activer, vous devez créer votre propre fonction définie par l'utilisateur. La bonne nouvelle est qu'une telle fonction est déjà écrite, testée et prête à être utilisée. Tout ce que vous avez à faire est de copier ce code, de le coller dans votre éditeur VBA, puis d'enregistrer votre fichier en tant que classeur activé par macro (.xlsm).
La fonction a la syntaxe suivante :
RegExpReplace(texte, motif, remplacement, [numéro_instance], [casse_correspondante])Les trois premiers arguments sont obligatoires, les deux derniers sont facultatifs.
Où :
- Texte - la chaîne de texte à rechercher.
- Patronage - l'expression régulière à rechercher.
- Remplacement - le texte à remplacer par. Pour supprimer les sous-chaînes correspondant au motif, utilisez un chaîne vide ("") pour le remplacement.
- Numéro d'instance (facultatif) - l'instance à remplacer. Si elle est omise, toutes les correspondances trouvées sont remplacées (par défaut).
- Match_case (facultatif) - une valeur booléenne indiquant s'il faut respecter ou ignorer la casse du texte. Pour une correspondance sensible à la casse, utilisez TRUE (par défaut) ; pour une correspondance insensible à la casse - FALSE.
Pour plus d'informations, veuillez consulter la fonction RegExpReplace.
Conseil : dans des cas simples, vous pouvez supprimer des caractères ou des mots spécifiques dans les cellules à l'aide de formules Excel, mais les expressions régulières offrent beaucoup plus d'options à cet égard.
Comment supprimer des chaînes de caractères à l'aide d'expressions régulières - exemples
Comme indiqué plus haut, pour supprimer les parties de texte correspondant à un motif, vous devez les remplacer par une chaîne vide. Une formule générique prend donc cette forme :
RegExpReplace(texte, motif, "", [numéro_instance], [casse_match])Les exemples ci-dessous montrent différentes mises en œuvre de ce concept de base.
Supprimer toutes les correspondances ou une correspondance spécifique
La fonction RegExpReplace est conçue pour trouver toutes les sous-chaînes correspondant à une expression rationnelle donnée. Les occurrences à supprimer sont contrôlées par le quatrième argument facultatif, appelé numéro d'instance .
La valeur par défaut est "toutes les correspondances" - lorsque l'option numéro d'instance est omis, toutes les correspondances trouvées sont supprimées. Pour supprimer une correspondance spécifique, définissez le numéro d'instance.
Dans les chaînes ci-dessous, supposons que vous vouliez supprimer le numéro de la première commande. Tous ces numéros commencent par le signe dièse (#) et contiennent exactement 5 chiffres. Nous pouvons donc les identifier en utilisant cette regex :
Patronage : #\d{5}\b
La limite du mot \b spécifie qu'une sous-chaîne correspondante ne peut pas faire partie d'une chaîne plus grande telle que #10000001.
Pour supprimer toutes les correspondances, l'option numéro d'instance n'est pas défini :
=RegExpReplace(A5, "#\d{5}\b", "")
Pour n'éradiquer que la première occurrence, nous fixons le paramètre numéro d'instance à 1 :
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex pour supprimer certains caractères
Pour supprimer certains caractères d'une chaîne, il suffit d'écrire tous les caractères indésirables et de les séparer par une barre verticale.
Par exemple, pour normaliser les numéros de téléphone écrits dans différents formats, il faut d'abord se débarrasser de caractères spécifiques tels que les parenthèses, les tirets, les points et les espaces.
Patronage : \(
=RegExpReplace(A5, "\(
Le résultat de cette opération est un nombre à 10 chiffres comme "1234567890".
Pour des raisons de commodité, vous pouvez saisir l'expression dans une cellule distincte et vous référer à cette cellule en utilisant une référence absolue telle que $A$2 :
=RegExpReplace(A5, $A$2, "")
Ensuite, vous pouvez normaliser la mise en forme comme vous le souhaitez en utilisant l'opérateur de concaténation (& ;) et les fonctions Text telles que RIGHT, MID et LEFT.
Par exemple, pour écrire tous les numéros de téléphone au format (123) 456-7890, la formule est la suivante :
= "("&LEFT(B5, 3)& ;") "&MID(B5, 4, 3)& ;"-"&RIGHT(B5, 4)
Où B5 est la sortie de la fonction RegExpReplace.
Suppression des caractères spéciaux à l'aide d'une regex
Dans l'un de nos tutoriels, nous avons vu comment supprimer des caractères indésirables dans Excel à l'aide de fonctions intégrées et personnalisées. Les expressions régulières rendent les choses beaucoup plus faciles ! Au lieu d'énumérer tous les caractères à supprimer, il suffit de spécifier ceux que vous voulez garder :)
Le modèle est basé sur classes de caractères négatives - un signe d'insertion est placé à l'intérieur d'une classe de caractères [^ ] pour correspondre à tout caractère unique NON entre parenthèses. Le quantificateur + le force à considérer des caractères consécutifs comme une correspondance unique, de sorte qu'un remplacement est effectué pour une sous-chaîne correspondante plutôt que pour chaque caractère individuel.
En fonction de vos besoins, choisissez l'une des regex suivantes.
Pour supprimer non-alphanumérique caractères, c'est-à-dire tous les caractères sauf les lettres et les chiffres :
Patronage : [^0-9a-zA-Z]+ : [^0-9a-zA-Z]+
Pour purger tous les caractères sauf les lettres , chiffres et espaces :
Patronage : [^0-9a-zA-Z ]+
Pour supprimer tous les caractères sauf les lettres , chiffres et soulignement vous pouvez utiliser un \W qui représente tout caractère qui n'est PAS un caractère alphanumérique ou un trait de soulignement :
Patronage : \W+
Si vous voulez garder d'autres personnages Si vous utilisez des signes de ponctuation, par exemple, mettez-les entre parenthèses.
Par exemple, pour supprimer tout caractère autre qu'une lettre, un chiffre, un point, une virgule ou un espace, utilisez la regex suivante :
Patronage : [^0-9a-zA-Z\., ]+
Cela permet d'éliminer tous les caractères spéciaux, mais il reste des espaces blancs supplémentaires.
Pour résoudre ce problème, vous pouvez imbriquer la fonction ci-dessus dans une autre qui remplace les espaces multiples par un seul caractère d'espace.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Vous pouvez aussi utiliser la fonction TRIM native avec le même effet :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex pour supprimer les caractères non numériques
Pour supprimer tous les caractères non numériques d'une chaîne de caractères, vous pouvez utiliser soit cette longue formule, soit l'une des regex très simples énumérées ci-dessous.
Correspond à tout caractère qui n'est PAS un chiffre :
Patronage : \D+
Supprime les caractères non numériques en utilisant des classes négatives :
Patronage : [^0-9]+
Patronage : [^\d]+
Conseil : si votre objectif est de supprimer le texte et de répartir les chiffres restants dans des cellules distinctes ou de les placer tous dans une seule cellule en les séparant par un délimiteur spécifié, utilisez la fonction RegExpExtract comme expliqué dans la section Comment extraire des chiffres d'une chaîne de caractères à l'aide d'expressions régulières.
Regex pour supprimer tout ce qui suit un espace
Pour effacer tout ce qui suit un espace, utilisez le caractère espace ( ) ou espace blanc (\s) pour trouver le premier espace et .* pour correspondre à tous les caractères qui le suivent.
Si vous avez des chaînes de caractères d'une seule ligne qui ne contiennent que des espaces normaux (valeur 32 dans le système ASCII à 7 bits), les regex ci-dessous n'ont pas vraiment d'importance. Dans le cas de chaînes de caractères à plusieurs lignes, cela fait une différence.
Pour tout enlever après un caractère d'espacement utilisez cette regex :
Patronage : " .*"
=RegExpReplace(A5, " .*", "")
Cette formule éliminera tout ce qui se trouve après le premier espace de la formule chaque ligne Pour que les résultats s'affichent correctement, assurez-vous d'activer la fonction Wrap Text.
Pour tout dépouiller après un espace blanc (incluant un espace, une tabulation, un retour chariot et une nouvelle ligne), la regex est :
Patronage : \s.*
=RegExpReplace(A5, "\s.*", "")
Parce que \s correspond à plusieurs types d'espaces blancs différents, notamment une nouvelle ligne (\n), cette formule supprime tout ce qui suit le premier espace dans une cellule, quel que soit le nombre de lignes qu'elle contient.
Regex pour supprimer le texte après un caractère spécifique
En utilisant les méthodes de l'exemple précédent, vous pouvez effacer le texte après tout caractère que vous spécifiez.
Pour traiter chaque ligne séparément :
Modèle générique : char.*
Dans les chaînes de caractères à une ligne, cela supprimera tout ce qui suit char Dans les chaînes de caractères à plusieurs lignes, chaque ligne sera traitée individuellement car, dans la saveur Regex de VBA, un point (.) correspond à n'importe quel caractère, sauf une nouvelle ligne.
Pour traiter toutes les lignes comme une seule chaîne :
Modèle générique : char(.
Pour supprimer tout ce qui suit un caractère donné, y compris les nouvelles lignes, on ajoute \n au motif.
Par exemple, pour supprimer le texte après la première virgule d'une chaîne, essayez ces expressions régulières :
Patronage : ,.*
Patronage : ,(.
Dans la capture d'écran ci-dessous, vous pouvez examiner comment les résultats diffèrent.
Regex pour supprimer tout ce qui se trouve avant l'espace
Lorsque vous travaillez avec de longues chaînes de texte, vous pouvez parfois souhaiter les raccourcir en supprimant la même partie de l'information dans toutes les cellules. Nous examinons ci-dessous deux de ces cas.
Enlevez tout ce qui se trouve avant le dernier espace
Comme dans l'exemple précédent, une expression régulière dépend de votre compréhension d'un "espace".
Pour faire correspondre n'importe quoi à la dernier espace cette regex fera l'affaire (les guillemets sont ajoutés pour rendre perceptible un espace après un astérisque).
Patronage : ".* "
Pour correspondre à tout ce qui se trouve avant le dernier espace blanc (y compris un espace, une tabulation, un retour chariot et une nouvelle ligne), utilisez cette expression régulière.
Patronage : .*\s
La différence est particulièrement sensible sur les chaînes de caractères à plusieurs lignes.
Enlevez tout ce qui se trouve avant le premier espace
Pour faire correspondre n'importe quoi jusqu'au premier espace d'une chaîne, vous pouvez utiliser cette expression régulière :
Patronage : ^[^ ]* +
À partir du début d'une chaîne de caractères ^, nous faisons correspondre zéro ou plusieurs caractères sans espace [^ ]* qui sont immédiatement suivis d'un ou de plusieurs espaces " + ". La dernière partie est ajoutée afin d'éviter la présence éventuelle d'espaces en tête des résultats.
Pour supprimer le texte avant le premier espace de chaque ligne, la formule est écrite en mode "toutes les correspondances" par défaut ( numéro d'instance omis) :
=RegExpReplace(A5, "^[^ ]* +", "")
Pour supprimer le texte avant le premier espace de la première ligne, et laisser toutes les autres lignes intactes, l'option numéro d'instance est fixé à 1 :
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex pour supprimer tout ce qui précède le caractère
La façon la plus simple de supprimer tout le texte avant un caractère spécifique est d'utiliser une regex comme celle-ci :
Modèle générique : ^[^char]*char
Traduit en langage humain, il dit : "à partir du début d'une chaîne de caractères ancrée par ^, faire correspondre 0 ou plusieurs caractères sauf char [^char]* jusqu'à la première occurrence de char .
Par exemple, pour supprimer tout le texte situé avant le premier point, utilisez cette expression régulière :
Patronage : ^[^ :]* :
Pour éviter les espaces dans les résultats, ajoutez un caractère d'espacement \s* à la fin, ce qui supprimera tout ce qui se trouve avant les deux points et coupera les espaces qui se trouvent juste après :
Patronage : ^[^ :]*:\s*
=RegExpReplace(A5, "^[^ :]*:\s*", "")
Astuce : outre les expressions régulières, Excel dispose de ses propres moyens pour supprimer du texte par position ou par correspondance. Pour apprendre comment accomplir cette tâche avec des formules natives, veuillez consulter Comment supprimer du texte avant ou après un caractère dans Excel.
Regex pour supprimer tout sauf
Pour supprimer tous les caractères d'une chaîne de caractères, à l'exception de ceux que vous souhaitez conserver, utilisez les classes de caractères négatives.
Par exemple, pour supprimer tous les caractères sauf les lettres minuscules et les points, la regex est :
Patronage : [^a-z\.]+
En fait, nous pourrions nous passer du quantificateur + ici, puisque notre fonction remplace toutes les correspondances trouvées. Le quantificateur permet simplement d'aller un peu plus vite - au lieu de traiter chaque caractère individuel, vous remplacez une sous-chaîne.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex pour supprimer les balises html dans Excel
Tout d'abord, il convient de noter que le HTML n'est pas un langage régulier, de sorte que l'analyser à l'aide d'expressions régulières n'est pas la meilleure solution. Cela dit, les expressions régulières peuvent certainement vous aider à supprimer les balises de vos cellules pour rendre votre ensemble de données plus propre.
Étant donné que les balises html sont toujours placées entre crochets, vous pouvez les trouver en utilisant l'une des regex suivantes.
Classe négative :
Patronage : ]*> ;
Ici, nous faisons correspondre un crochet d'ouverture, suivi de zéro ou plusieurs occurrences de n'importe quel caractère sauf le crochet de fermeture [^> ;]* jusqu'au crochet de fermeture le plus proche.
Recherche paresseuse :
Patronage :
Le point d'interrogation oblige .* à rechercher le moins de caractères possible jusqu'à ce qu'il trouve une parenthèse fermante.
Quel que soit le modèle que vous choisissez, le résultat sera absolument le même.
Par exemple, pour supprimer toutes les balises html d'une chaîne en A5 et laisser du texte, la formule est la suivante :
=RegExpReplace(A5, "]*> ;", "")
Ou vous pouvez utiliser le quantificateur paresseux comme indiqué dans la capture d'écran :
Cette solution fonctionne parfaitement pour un texte unique (lignes 5 à 9). Pour les textes multiples (lignes 10 à 12), les résultats sont discutables - les textes de différentes balises sont fusionnés en un seul. Est-ce correct ou non ? Je crains que ce ne soit pas quelque chose qui peut être facilement décidé - tout dépend de votre compréhension du résultat souhaité. Par exemple, en B11, le résultat "A1" est attendu ; alors qu'en B10, vous pourriez vouloir"data1" et "data2" doivent être séparés par un espace.
Pour supprimer les balises html et séparer les textes restants par des espaces, vous pouvez procéder de la manière suivante :
- Remplacer les balises par des espaces " ", et non par des chaînes vides :
=RegExpReplace(A5, "]*> ;", " ")
- Réduire les espaces multiples à un seul caractère d'espace :
=RegExpReplace(RegExpReplace(A5, "]*> ;", " "), " +", " ")
- Supprimez les espaces de tête et de queue :
=TRIM(RegExpReplace(RegExpReplace(A5, "]*> ;", " "), " +", " ")))
Le résultat ressemblera à ceci :
Ablebits Regex Remove Tool
Si vous avez eu l'occasion d'utiliser notre Ultimate Suite pour Excel, vous avez probablement déjà découvert les nouveaux outils Regex introduits dans la récente version. La beauté de ces fonctions Regex basées sur .NET est que, premièrement, elles prennent en charge la syntaxe complète des expressions régulières sans les limitations de VBA RegExp, et deuxièmement, elles ne nécessitent pas l'insertion de code VBA dans vos classeurs car toute l'intégration du code est effectuée.par nous à l'arrière.
Votre part du travail consiste à construire une expression régulière et à la servir à la fonction :) Je vais vous montrer comment le faire sur un exemple pratique.
Comment supprimer le texte entre crochets et parenthèses à l'aide d'une expression rationnelle ?
Dans les longues chaînes de texte, les informations moins importantes sont souvent entre [crochets] et (parenthèses). Comment supprimer ces détails non pertinents en conservant toutes les autres données ?
En fait, nous avons déjà construit une regex similaire pour supprimer les balises html, c'est-à-dire le texte entre crochets. Évidemment, les mêmes méthodes fonctionneront aussi pour les crochets carrés et ronds.
Patronage : (\(.*?\))
L'astuce consiste à utiliser un quantificateur paresseux (* ?) pour faire correspondre la sous-chaîne la plus courte possible. Le premier groupe (\(.*?\)) correspond à tout ce qui est compris entre une parenthèse ouvrante et la première parenthèse fermante. Le second groupe (\[.*?\]) correspond à tout ce qui est compris entre une parenthèse ouvrante et la première parenthèse fermante. Une barre verticale
Une fois le motif déterminé, nous le transmettons à notre fonction Regex Remove, en procédant comme suit :
- Sur le Ablebits Data dans l'onglet Texte cliquez sur Outils Regex .
Pour obtenir les résultats sous forme de formules, et non de valeurs, sélectionnez l'option Insérer comme une formule la case à cocher.
Pour supprimer le texte entre parenthèses des chaînes de caractères de A2:A5, nous configurons les paramètres comme suit :
En conséquence, le AblebitsRegexRemove est insérée dans une nouvelle colonne à côté de vos données originales.
La fonction peut également être saisie directement dans une cellule via la fonction standard Fonction d'insertion où elle est classée sous la rubrique AblebitsUDFs .
Comme AblebitsRegexRemove est conçue pour supprimer du texte, elle ne requiert que deux arguments - la chaîne de caractères source et le regex. Les deux paramètres peuvent être définis directement dans une formule ou fournis sous forme de références de cellules. Si nécessaire, cette fonction personnalisée peut être utilisée conjointement avec n'importe quelle fonction native.
Par exemple, pour supprimer les espaces supplémentaires dans les chaînes de caractères résultantes, vous pouvez utiliser la fonction TRIM comme enveloppe :
=TRIM(AblebitsRegexRemove(A5, $A$2))
Voilà comment supprimer des chaînes de caractères dans Excel à l'aide d'expressions régulières. Je vous remercie de votre lecture et j'ai hâte de vous retrouver sur notre blog la semaine prochaine !
Téléchargements disponibles
Supprimer des chaînes de caractères à l'aide de regex - exemples (fichier .xlsm)
Ultimate Suite - version d'essai (fichier .exe)