J'essaie d'extraire toutes les adresses de cellule / plage apparaissent dans une formule dans une cellule de fiches Google.
Les formules par nature pourraient être très compliquées. J'ai essayé de nombreux modèles, cela fonctionne dans des testeurs Web, mais pas sur Google Feuilles Re2. P>
L'exemple suivant montre deux problèmes. Peut-être que j'ai mal interprété les résultats correspondants, mais si je comprends bien, ce sont 4 matchs. P>
formule (ignorer la logique): strong> p> =(STDEVA(Sheet1!B2:B5)+sum($A$1:$A$2))*B2
3 Réponses :
semble, vous pouvez utiliser voir une démo sur regex101.com strong> . p> p>
Bien qu'il ait supprimé tous les matchs de regroupement, il ne renvoie toujours que le premier match a 13 $: B4 code>. Je réalise maintenant que c'est peut-être le drapeau global
\ g code> dans la démonstration. Existe-t-il un
RE2 code> équivalent drapeau ?
Essayez: ou plus: p>
=INDEX(SUBSTITUTE(TEXTJOIN(",", 1,
IFNA(IFNA(REGEXEXTRACT(SPLIT(SUBSTITUTE(FORMULATEXT(A3), "'", "â¥"),
"+-*/^()=<>"), "(?:.+!)?[A-Z$]+\d+(?::[A-Z$](?:\d+)?)?"),
REGEXEXTRACT(SPLIT(SUBSTITUTE(FORMULATEXT(A3), "'", "â¥"),
"+-*/^()=<>"), "(?:.+!)?[A-Z$]:[A-Z$]+")))), "â¥", "'"))
@OJNSIM Cela devrait couvrir tous vos besoins
Je sous-constate ce que vous avez fait, je ne comprends que pourquoi cela a résolu la question ou mieux dire, pourquoi il y a un problème en premier lieu. Le fait que seul le premier match soit renvoyé, est la façon dont RE2 se comporte?
En outre, je le fais en fait dans un script et non avec les fonctions internes. Donc, votre suggestion est de diviser le texte de tous formules en une matrice, et une boucle sur ce dernier pour (essayer) correspond à chaque entrée? Pour clarifier, l'approche "Stroit en avant" n'a pas fonctionné ni avec fonction interne ni sur script (où j'ai commencé).
Aussi, comme je l'ai commenté sur la réponse de Jan, lors de la suppression du / g code> drapeau A> Il renvoie également le seul match. Alors peut-être que re2 i> a un tel drapeau, et c'est en fait le problème?
Je ne sais pas quelle question de suivi à propos de ... Regex ne renvoie toujours qu'un nombre spécifié de groupes, c'est pourquoi il est nécessaire de diviser l'entrée car le nombre de correspondances est variable. REGEX101 est un bon outil mais totalement inutile conjointement avec Google Feuilles
J'ai compris une meilleure façon sans division, en utilisant le drapeau Voici le code: p> Qu'est-ce qui en fait un peu compliqué sont nommés.
Ce code correspondra et analysera et renvoie une liste avec toutes les adresses prédécesseurs, y compris les adresses des anneaux NameDranges. P> P> / g code>.
Cependant, cela fonctionne dans un script et non à l'aide de Feuilles de la fonction de regex interne (c.-à-d.
Regexextract code>), car je n'ai pas pu comprendre comment formater la chaîne de regex dans une cellule qui contiendra le drapeau / g et
REGEXEXtract code> acceptera comme une regex valide.
Partagez une copie de votre feuille avec l'exemple de la sortie souhaitée
i.Stack.imgur.com/epwag.png
Et si vous n'utilisez aucun groupe de capture?
\ $? [AZ] + \ $? \ d + (? :: (?: (?: \ $? [AZ] + \ $? \ d +))? CODE> REGEX101.com/R/A5YKB5/1
@ Player0 Devinez que je n'étais pas assez clair. S'il vous plaît voir mon édition.
@Thefourthbird comme je ne suis pas un maître de regex, je ne comprends pas complètement l'utilisation du regroupement, mais je comprends que cela empêchera la correspondance du groupe. Quoi qu'il en soit, dans Google Feuilles ne renvoie toujours que le premier match
13 $: B4 code>