web-dev-qa-db-fra.com

Rechercher un texte pour un texte spécifique, puis plusieurs déclarations if en fonction de ce qui est disponible

J'ai une question étrange à propos de Google Sheets.

Premièrement, voici ce que j’ai eu jusqu’à présent, mais une erreur "Fonction REGEXEXTRACT, paramètre 2" Mon texte ici "n’est pas une expression régulière valide, est renvoyée."

=IF(REGEXEXTRACT(W8, $Y$1), SUBSTITUTE(W8,$Y$1, ""), 
 IF(REGEXEXTRACT(W8, $Y$2), SUBSTITUTE(W8,$Y$2, ""), 
    IF(REGEXEXTRACT(W8, $Y$3), SUBSTITUTE(W8,$Y$3, ""),
       IF(REGEXEXTRACT(W8, $Y$4), SUBSTITUTE(W8,$Y$4, ""), ""
                    )
     )
   )
)

Essentiellement, je souhaite vérifier si une cellule contient du texte, avec des résultats différents en fonction du texte trouvé. J'ai 4 possibilités de ce qu'il pourrait trouver, disons qu'il cherche Abc, def, ghi, jkl dans une ligne de texte. Lorsqu'il voit abc, il regarde W8 et remplace le texte correspondant dans W8 par $ Y $ 1. S'il voit def, il regarde W8 et remplace le texte correspondant dans W8 par $ Y $ 2. Etc. Etc. Etc. Et puis, idéalement, le symbole est vide s'il ne trouve aucun de ceux-ci.

J'ai l'impression d'être sur le point de bien faire les choses, mais je ne peux tout simplement pas le voir.

Éditer

J'ai ajouté la fonction istext à celui-ci, et le message d'erreur est supprimé, mais maintenant, il ne fait que retourner un blanc.

=IF(ISTEXT(regexextract(W8, $Y$1)), SUBSTITUTE(W8,$Y$1, ""), 
 IF(ISTEXT(regexextract(W8, $Y$2)), SUBSTITUTE(W8,$Y$2, ""), 
    IF(ISTEXT(regexextract(W8, $Y$3)), SUBSTITUTE(W8,$Y$3, ""),
       IF(ISTEXT(regexextract(W8, $Y$4)), SUBSTITUTE(W8,$Y$4, ""), ""
                    )
     )
   )

Edit 2

Par souci de clarté, j'inclus ce que chacune des cellules que je modifie est la suivante:

W8: valeur:=SUBSTITUTE(C8,V8, "")
Text:/slideshows/blah-blah.html?utm_source=naytev&utm_campaign=ab&utm_medium=cwpg&utm_term=paid

$ Y $ 2: ?utm_source=naytev&utm_campaign=ab&utm_medium=cwpg&utm_term=paid

EDIT

J'ai condensé mon problème en une seule ligne, pour le simplifier davantage: =IF(ISTEXT(REGEXMATCH(W8, $Y$2)), SUBSTITUTE(W8,$Y$2, ""), "00") Returns 00

3
Chris McMahon

Réponse courte

W8: ... texte /slideshows/blah-blah.html?utm_source=naytev&utm_campaign=ab&utm_medium=cwpg&utm_term=paid
$ Y $ 2: ?utm_source=naytev&utm_campaign=ab&utm_medium=cwpg&utm_term=paid

La formule ne fonctionne pas car, parmi d'autres causes possibles, les valeurs de W8 et $ Y $ 2 ne sont pas des expressions régulières valides. Les deux ressemblent à des parties d'une URL et incluent des caractères qui, dans une expression régulière, ont une signification particulière.

Comme mentionné dans un commentaire à cette réponse à la place des fonctions d’expression régulière, vous pouvez utiliser FIND ou SEARCH , ce qui pourrait être la solution à jeun (et plus facile?) postuler.

Explication

Le message d'erreur initial implique qu'au moins une des valeurs suivantes: $ Y $ 1, $ Y $ 2, $ Y $ 3, $ Y $ 4 ne sont pas des expressions régulières valides.

De REGEXEXTRACT

Syntaxe

REGEXEXTRACT (text, regular_expression)

text - Le texte saisi.

regular_expression - La première partie du texte correspondant à cette expression sera renvoyée.

Remarques

  • Les produits Google utilisent RE2 pour expressions régulières . En savoir plus sur l'utilisation de expressions RE2 .
  • Cette fonction ne fonctionne qu'avec du texte (pas des chiffres) en entrée et renvoie du texte en sortie. Si vous souhaitez utiliser un nombre comme sortie, essayez d’utiliser la fonction VALUE avec cette fonction. Si des nombres sont utilisés en entrée, convertissez-les en texte à l'aide de la fonction TEXT.

Il est intéressant de noter que, lorsque nous travaillons avec des fonctions imbriquées et qu’une formule volumineuse ne fonctionne pas, il est judicieux de tester chaque partie individuellement, c’est-à-dire de valider que la ou les valeurs de chaque argument de chaque fonction sont valides et de bonne qualité. le bon type.

H/T à un utilisateur qui utilise pour changer son nom d'affichage à tout moment et qui a posté cette réponse

2
Rubén

Les réponses précédentes étaient justes. Votre expression régulière contient des caractères vagues comme ?, ce qui voudrait dire différentes choses dans une expression régulière. Heureusement, re2 prend en charge le texte littéral.

\Q...\E

Tout ce qui est écrit entre Q et E est pris littéralement.

Si

A1:

/slideshows/blah-blah.html?utm_source=naytev&utm_campaign=ab&utm_medium=cwpg&utm_term=paid

A2:

?utm_source=naytev&utm_campaign=ab&utm_medium=cwpg&utm_term=paid

A3:

=IF(REGEXMATCH(A1,"\Q"&A2&"\E"),SUBSTITUTE(A1, A2,""))

Valeur A3: /slideshows/blah-blah.html

0
TheMaster