Comment remplacer les virgules à l’intérieur ou à l’extérieur des parenthèses dans Google Sheets – Regex

Nous pouvons utiliser des formules Regex imbriquées pour remplacer les virgules à l’intérieur ou à l’extérieur des parenthèses dans Google Sheets. Mais pourquoi voulons-nous remplacer une partie des virgules dans une longue chaîne ?

Dans mon cas, je veux diviser une longue chaîne en utilisant la virgule comme délimiteur. Prenons l’exemple de la chaîne suivante, qui se trouve dans la cellule A1 d’un de mes fichiers Google Sheets : « Tâche 1, Tâche 2 (Sous-tâche 1, Sous-tâche 2), Tâche 3, Tâche 4. »

Je veux diviser chaque tâche principale tout en conservant les sous-tâches qui lui sont associées. Voici le résultat que j’attends :

Output

Pour obtenir ce résultat, vous devez d’abord remplacer les virgules à l’intérieur ou à l’extérieur des parenthèses.

Pour correspondre aux virgules à l’extérieur des parenthèses tout en excluant celles à l’intérieur, nous pouvons utiliser des expressions régulières RE2.

Les formules et explications

Formule pour correspondre et remplacer les virgules à l’intérieur des parenthèses (B1) :

=regexreplace(A1,regexextract(A1,"((.+))"),regexextract(REGEXREPLACE(A1,",","|"),"((.+))"))

Formule pour correspondre et remplacer les virgules à l’extérieur des parenthèses (B2) :

=regexreplace(regexreplace(regexreplace(A1,regexextract(A1,"((.+))"),regexextract(REGEXREPLACE(A1,",","🐠"),"((.+))")),",","|"),"🐠",",")

Pouvez-vous expliquer les formules ci-dessus, car il s’agit de formules Regex imbriquées ou de formules combinées ?

Bien sûr ! Je vais d’abord expliquer la formule B1.

Explication de la formule B1

Il y a deux parties : =regexreplace(A1,partie_1,partie_2,"((.+))")

Partie 1 : regexextract(A1,"((.+))")

La fonction REGEXEXTRACT ci-dessus extrait les chaînes à l’intérieur des parenthèses.

Partie 2 : =regexextract(REGEXREPLACE(A1,",","|"),"((.+))")

La fonction REGEXREPLACE remplace les virgules à l’intérieur des parenthèses, et la fonction REGEXEXTRACT les extrait.

La formule B1 correspond à la partie_1 et la remplace par la partie_2.

Cela signifie que la formule correspond à « Sous-tâche 1, Sous-tâche 2 » et la remplace par « Sous-tâche 1| Sous-tâche 2 ».

Explication de la formule B2

Nous avons utilisé une variation de la formule B1 pour correspondre et remplacer les virgules à l’extérieur des parenthèses.

Ici, nous avons enveloppé la formule B1 avec deux autres formules REGEXREPLACE.

Syntaxe : =regexreplace(regexreplace(B1_formula,"((.+))")),",","|"),"🐠",",")

Quels sont leurs rôles ?

Je vais y venir. Mais avant cela, une chose importante.

Dans la formule B1, nous avons utilisé le délimiteur Pipe (|).

Ici, nous avons utilisé un délimiteur en forme de poisson (🐠) à la place, car le premier peut poser des problèmes dans les formules REGEXREPLACE externes.

Formule B1 ici : =regexreplace(A1,regexextract(A1,"((.+))"),regexextract(REGEXREPLACE(A1,",","🐠"),"((.+))"))

Son résultat : « Tâche 1, Tâche 2 (Sous-tâche 1🐠 Sous-tâche 2), Tâche 3, Tâche 4. »

Maintenant voici les rôles des deux formules REGEXREPLACE externes.

Le premier remplace les virgules par des symboles Pipe.

Le deuxième remplace les symboles Poisson par des virgules.

Les formules Google Sheets ci-dessus dans B1 et B2 ne fonctionneront pas si vous avez des valeurs dans plusieurs parenthèses dans A1.

Remplacer les virgules à l’intérieur ou à l’extérieur de plusieurs parenthèses

Dans les exemples ci-dessus, je n’ai que des sous-tâches pour la tâche 2. Supposons que j’aie aussi des sous-tâches pour la tâche 5.

La longue chaîne dans A1 est la suivante : « Tâche 1, Tâche 2 (Sous-tâche 1, Sous-tâche 2), Tâche 3, Tâche 4, Tâche 5 (Sous-tâche 1, Sous-tâche 2, Sous-tâche 3), Tâche 6, Tâche 7. »

Voici les résultats attendus :

Output

Lorsque vous voulez correspondre et remplacer les virgules à l’intérieur de plusieurs parenthèses, suivez les étapes suivantes. Vous obtiendrez la formule à l’étape finale seulement.

Il y a trois étapes impliquées.

Étape 1

Dans la cellule D1, divisons la chaîne dans A1 (voir image n°3 ci-dessous).

=ArrayFormula(TRIM(flatten(split(regexreplace(A1,".z","(🐟)"),")")))&")")

La formule Array divise la chaîne de la manière suivante :

  1. Elle ajoute un (🐟) à la fin de la chaîne dans la cellule A1.
  2. Elle divise ensuite la chaîne en utilisant la parenthèse fermante, c’est-à-dire ), comme délimiteur.
  3. Elle ajoute à nouveau la parenthèse fermante qui a été supprimée lors de la division.
  4. Elle aplatit les résultats pour les présenter sous forme de lignes (verticalement) au lieu de colonnes (horizontalement).

Étape 2

Dans la cellule E1, utilisez notre formule B1 précédente. La seule différence ici est la référence des cellules. Nous devrions utiliser D1:D3 (les données traitées) au lieu de A1.

=ArrayFormula(regexreplace(D1:D3,regexextract(D1:D3,"((.+))"),regexextract(REGEXREPLACE(D1:D3,",","|"),"((.+))")))

Veuillez consulter l’image ci-dessus (plage E1:E2).

Comme vous pouvez le voir, nous avons déjà remplacé les virgules à l’intérieur de plusieurs parenthèses/brackets par des pipes.

Étape 3

Dans la cellule B1, utilisez la formule suivante :

=textjoin("",true,ArrayFormula(regexreplace(E1:E3,"(🐟)","")))

Elle remplace le délimiteur en forme de poisson supplémentaire dans la sortie de l’étape 2, puis utilise TEXTJOIN pour joindre les chaînes divisées.

Vous pouvez combiner toutes les étapes 1 à 3 et les utiliser comme suit dans la cellule B1.

Formule finale :

=textjoin("",true,ArrayFormula(regexreplace(regexreplace(TRIM(flatten(split(regexreplace(A1,".z","(🐟)"),")")))&")",regexextract(TRIM(flatten(split(regexreplace(A1,".z","(🐟)"),")")))&")","((.+))"),regexextract(REGEXREPLACE(TRIM(flatten(split(regexreplace(A1,".z","(🐟)"),")")))&")",",","|"),"((.+))")),"(🐟)","")))

Correspondre et remplacer les virgules à l’extérieur de plusieurs parenthèses

Dans l’exemple ci-dessus dans Google Sheets, nous avons écrit la formule en trois étapes.

Pour remplacer les virgules à l’extérieur de plusieurs parenthèses dans une longue chaîne dans Google Sheets, vous pouvez utiliser les étapes 1 et 3.

Dans l’étape 2 ci-dessus, nous avons utilisé la formule B1 après avoir modifié A1 avec D1:D3.

Ici, au lieu de cela, nous devrions utiliser la formule B2 après avoir modifié A1 avec D1:D3.

C’est tout.

Dans la feuille d’exemple suivante, vous trouverez toutes les formules.

Exemple de feuille 191021

Pour plus de secrets juteux et d’astuces, visitez Crawlan.com.

Articles en lien