Français

Texte et outils quotidiens · Boîte à outils de texte

Groupes de capture Regex dans Rechercher et remplacer : réorganiser les dates avec $1, $2, $3

· Comment ça marche

expression régulière rechercher et remplacer dates délimiteurs

Trois champs de date capturés passant de l'ordre année-mois-jour à jour-mois-année
Illustration vectorielle originale de ToolAcre

Montre comment les parenthèses capturent des parties d'une correspondance et comment $1, $2 et $3 les réutilisent dans le remplacement, en utilisant la réécriture classique ISO-jour-mois-année et quelques autres réorganisations.

Quatre cents dates dans le mauvais ordre : pourquoi la modification manuelle de 2024-01-02 dans 02/01/2024 est un travail pour les groupes de capture

Une exportation de feuille de calcul peut laisser quatre cents dates dans l'ordre année-mois-jour de style ISO lorsqu'une feuille de calcul britannique attend le jour/month/year. La modification manuelle de `2024-01-02` dans `02/01/2024` est lente, mais le plus grand risque est l'incohérence : une ligne sautée ou un chiffre transposé peut survivre jusqu'à ce qu'un rapport soit distribué.

Rechercher et remplacer peut traiter chaque date comme le même arrangement de pièces plutôt que comme quatre cents chaînes sans rapport. Une expression régulière identifie l'année, le mois et le jour, tandis que le remplacement réécrit ces parties capturées dans un autre ordre. Les chiffres d'origine sont réutilisés, de sorte que l'opération modifie la structure plutôt que de retaper les valeurs.

Ce que les parenthèses capturent : comment chaque groupe obtient un numéro de gauche à droite et ce que \d{4} et \d{2} correspondent

Les parenthèses créent des groupes de capture. Dans `(\d{4})-(\d{2})-(\d{2})`, le premier groupe capture quatre chiffres, le deuxième en capture deux et le troisième en capture deux. `\d` signifie un chiffre dans ce modèle JavaScript, tandis que `{4}` et `{2}` spécifient le nombre exact de répétitions requises à l'intérieur de chaque groupe.

Les groupes reçoivent des numéros de chaque parenthèse ouvrante au fur et à mesure que le moteur lit de gauche à droite. Pour `2024-01-02`, le groupe 1 est `2024`, le groupe 2 est `01` et le groupe 3 est `02` ; les traits d'union correspondent aux séparateurs mais se trouvent en dehors des parenthèses, ils ne sont donc pas conservés en tant que valeurs capturées.

Utiliser $1, $2 et $3 dans le remplacement — reconstruire la correspondance dans un nouvel ordre avec de nouveaux séparateurs

Le remplacement `$3/$2/$1` demande à JavaScript d'insérer la troisième capture, une barre oblique, la deuxième capture, une autre barre oblique et la première capture. Appliquées à l'exemple, ces références produisent `02/01/2024`. Les références en dollars sont des instructions de remplacement, et non du texte qui doit également apparaître dans la date correspondante.

ToolAcre transmet la chaîne de remplacement à l'opération de remplacement de chaîne JavaScript standard. Sa source prend explicitement en charge les références numérotées telles que `$1`, `$2` et `$3`, et le modèle de recherche est compilé globalement. Cet indicateur global explique pourquoi chaque date correspondante est réécrite en une seule opération au lieu de seulement la première correspondance.

Exemple fonctionnel — (\d{4})-(\d{2})-(\d{2}) remplacé par $3/$2/$1, puis vérification du nombre de remplacements par rapport au nombre de lignes

Collez la colonne exportée, activez Regex, saisissez `(\d{4})-(\d{2})-(\d{2})` dans Rechercher et saisissez `$3/$2/$1` dans Remplacer. La sélection de Remplacer tout compte d’abord les correspondances, puis les réécrit, de sorte que le résultat indique le nombre de chaînes en forme de date qui ont été modifiées dans l’ensemble du texte collé.

Comparez ce nombre avec le nombre de lignes attendu avant de recopier le résultat dans la feuille de calcul. Un nombre inférieur indique des blancs ou des dates dans un autre format ; un nombre plus élevé signifie qu'un texte similaire ailleurs correspond également. L'outil n'a pas d'aperçu de remplacement, utilisez donc son action Annuler si le décompte ou la sortie révèle un modèle trop large.

Plus de réorganisations — 'Nom, Prénom' en 'Prénom Nom' et échange des colonnes d'une liste à deux colonnes

Le même principe peut transformer `Surname, Forename` en `Forename Surname` lorsque chaque ligne contient de manière fiable une virgule : recherchez `([^,]+), ([^\r\n]+)` et remplacez-le par `$2 $1`. Ici, chaque groupe capture le texte d'un côté du séparateur connu, plutôt que de supposer un nombre fixe de chiffres.

Un échange de deux colonnes n'est pas une opération de table intégrée, malgré le libellé général. Cela ne fonctionne que lorsque le texte collé a un délimiteur fiable et que le modèle décrit les limites des lignes en toute sécurité. Les virgules dans les noms, les champs manquants ou les onglets incohérents nécessitent un nettoyage ou un modèle plus précis avant qu'un remplacement groupé ne soit fiable.

Plus de réorganisations ne fonctionnent que lorsque l'entrée a un séparateur fiable

Un point dans un modèle signifie presque n'importe quel caractère, donc un modèle de date écrit comme `(\d{4}).(\d{2}).(\d{2})` accepte également les barres obliques, les espaces ou les lettres entre les champs. Échappez à un point littéral en tant que `\.` et échappez aux autres métacaractères lorsqu'ils devraient correspondre à eux-mêmes. Une parenthèse invalide ou une parenthèse inachevée est signalée sans modifier le texte.

La numérotation des groupes commence à 1, et non à 0. Les signes dollar ont également une signification de remplacement particulière : `$&` insère la correspondance entière et `$$` produit un signe dollar littéral. Ce comportement s'applique même lorsque le mode regex est désactivé car ToolAcre échappe uniquement au côté recherche ; il n'échappe pas à la chaîne de remplacement avant que JavaScript ne la traite.

Ce que cela ne couvre pas : groupes nommés, noms de mois et de recherche qui nécessitent une table de recherche

Les groupes numérotés peuvent réorganiser le texte déjà présent dans une correspondance, mais ils ne peuvent pas traduire `Jan` en `01` car cela nécessite une recherche plutôt qu'une réorganisation. Cet article ne s'appuie pas non plus sur les groupes nommés ou sur lookbehind, dont l'utilité et la prise en charge du navigateur impliquent un ensemble de choix différent de ce simple nettoyage d'exportation.

L'expression de date vérifie la forme, pas la vérité du calendrier. Il correspondra à `2024-99-88` car deux chiffres satisfont chaque petit groupe. Validez les dates dans la feuille de calcul ou le système source lorsque l'exactitude est importante. Rechercher et remplacer est approprié pour un formatage cohérent, et non pour prouver que chaque mois et jour capturés est valide.

Ce qu'il faut retenir : un modèle, un remplacement, chaque ligne corrigée en même temps dans la boîte à outils de texte, avec annulation si le résultat n'est pas celui que vous attendiez

Les groupes de capture transforment une chaîne correspondante en morceaux réutilisables. Pour une colonne de date uniforme, trois groupes conservent l'année, le mois et le jour d'origine tandis que `$3/$2/$1` les place dans l'ordre britannique. La recherche globale gère toutes les correspondances et le nombre signalé fournit une vérification immédiate du nombre de lignes que vous aviez l'intention de modifier.

Gardez le flux de travail révisable : conservez une copie de l'exportation, utilisez le modèle le plus étroit qui lui correspond, comparez le décompte, inspectez plusieurs résultats et annulez lorsque les preuves ne correspondent pas à vos attentes. Un remplacement bien ciblé peut supprimer les modifications répétitives sans prétendre que chaque valeur sous forme de chiffre est automatiquement une date valide.