Comment puis-je obtenir une sous-plage de l'avant-dernier élément d'une formule sous Google Sheets?
J'essaie d'extraire toutes les occurrences de https://example.com/*
dans une cellule qui peut contenir plusieurs URL dispersées sur une chaîne comme:
abc https://example.com/abc https://google.com/ghi https://example.com/def/abc
afin que j'obtienne les chemins dans une seule chaîne, séparés par des espaces comme suit:
abc def/abc
Comme SPLIT semble être le moyen le plus simple pour cela, je dois me débarrasser du premier élément d'une formule comme:
=join("
",
arrayformula(
regexextract(
split(A5, "https://example.com/", false, true),
"[a-zA-Z0-9/\?=_]+")
)
)
Vous avez le concept de base juste à assembler étape par étape. Cela fait le travail:
=REGEXREPLACE(JOIN(" ",ARRAYFORMULA(IFERROR(
REGEXEXTRACT(SPLIT(A1," ",TRUE,TRUE),
"https://example.com/(\S+)"),""))),"\s+"," ")
split
la chaîne dans les espaces blancs, c'est sûr car les URL ne contiennent pas d'espace blanc, donc vous ne les décomposez certainement pas. Cela vous donne un tableau de chaînesexample.com
vous REGEXEXTRACT
exactement ces chemins et uniquement ces chemins utilisant un groupe de capture (\S+)
.IFERROR
pour remplacer simplement ces chaînes par des chaînes vides, nous ne nous en soucions pas.ARRAYFORMULA
puisque la sortie de split est un tableau. Nous avons donc maintenant un tableau de chaînes et de chemins vides.JOIN
maintenant ensemble en utilisant un espace blanc, encore une fois, les chemins ne contiennent pas d'espace blanc, donc nous ne perdons aucune structure.REGEXREPLACE
. Terminé!Le résultat est une chaîne de tous les chemins pour le domaine correct uniquement, séparés par un espace chacun.
Astuce: J'ai construit cette formule étape par étape, non pas comme une grande formule mais par morceaux exactement dans la séquence décrite ci-dessus pour garder les choses gérables.