web-dev-qa-db-fra.com

Comment utiliser le groupe de capture dans une fonction?

=REGEXREPLACE("string", "(ng)", UPPER("$1"))

Ce qui précède renvoie "chaîne", mais doit renvoyer "striNG".

Je suppose que cela est dû au fait que UPPER met la chaîne "$ 1" en majuscule plutôt que la chaîne contenant le groupe capturé.

Comment puis-je faire en sorte que REGEXREPLACE affiche le résultat attendu?

1
snazzybouche

Vous pouvez essayer de scinder cela en deux parties, en retournant la dernière en haut. Pas sûr de savoir comment imbriquer la partie supérieure à l'intérieur de la regex dans Gsheets.

=REGEXEXTRACT(A1,"stri") & upper(REGEXEXTRACT(A1, "(ng)"))

cela est revenu pour moi:

chaîne> striNG

3
Datanovice

cela dépendra beaucoup des données réelles, mais cela fonctionne aussi pour string

=REGEXREPLACE("stri"&UPPER("ng"); "(ng)"; "$1")

=REGEXREPLACE("string";"(n)";"")&
 UPPER(REGEXREPLACE("string";"([a-z]{4})";"")

=LEFT(REGEXREPLACE("string";"(w)";"$1");4)&
 UPPER(RIGHT(REGEXREPLACE("string";"(w)";"$1");2))

tous les retours: striNG

2
user0

ceci remplacera ng par NG dans le mot string ou tout autre mot consistant en ng

=REGEXEXTRACT(REGEXREPLACE("string"; "(ng)"; "NG"); "[a-zA-Z]{1,}")

cette formule fera la même chose, mais elle utilise UPPER() pour le faire:

=REGEXEXTRACT(REGEXREPLACE("string"; "(ng)"; UPPER("ng")); "[a-zA-Z]{1,}")

cette formule offre un peu plus de flexibilité en utilisant RIGHT() et en spécifiant les caractères majuscules:

=REGEXEXTRACT(REGEXREPLACE("string"; "(ng)"; RIGHT(UPPER("string"); 2)); "[a-zA-Z]{1,}")

et cette formule finale est capable de prendre n'importe quel mot et elle est également entièrement ajustable en spécifiant combien de caractères du côté droit à la fin du mot doivent être CAPSed:

=REGEXEXTRACT(REGEXREPLACE("string";
                     RIGHT("string";  2);
               RIGHT(UPPER("string"); 2)); "[a-zA-Z]{1,}")

1
user0