0
votes

Extraire des adresses de correspondance à l'aide de la syntaxe d'expression régulière de Google Feuilles Re2

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


5 commentaires

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 +))? 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


3 Réponses :


0
votes

semble, vous pouvez utiliser xxx

voir une démo sur regex101.com .


1 commentaires

Bien qu'il ait supprimé tous les matchs de regroupement, il ne renvoie toujours que le premier match a 13 $: B4 . Je réalise maintenant que c'est peut-être le drapeau global \ g dans la démonstration. Existe-t-il un RE2 équivalent drapeau ?



2
votes

Essayez: xxx pré>

 Entrez la description de l'image ici p>


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$]+")))), "♥", "'"))


5 commentaires

@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 drapeau Il renvoie également le seul match. Alors peut-être que re2 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



0
votes

J'ai compris une meilleure façon sans division, en utilisant le drapeau / g . Cependant, cela fonctionne dans un script et non à l'aide de Feuilles de la fonction de regex interne (c.-à-d. Regexextract ), car je n'ai pas pu comprendre comment formater la chaîne de regex dans une cellule qui contiendra le drapeau / g et REGEXEXtract acceptera comme une regex valide.

Voici le code: xxx

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.


0 commentaires