Exemple:
A2 -> What a beautiful day! #sunday #summer
B3 -> #news Stay tuned for our next contest! #something
Desired output on B2 ->#sunday #summer
Desired output on B3 ->#news #something
Le plus proche que j'ai trouvé est REGEXEXTRACT mais il ne livre que le premier mot qui commence par un #:
=REGEXEXTRACT(A2;"#[A-z0-9]+")
Bien que regexextract
puisse renvoyer un tablea , vous devez savoir combien il en existe, ce qui n'est donc pas utile dans votre cas. Pour contourner cette limitation de regexextract
, vous devez utiliser regexreplace
pour vous débarrasser du texte que vous ne voulez pas . Comme ça:
=trim(regexreplace(A2, "(^|\s)[^#]\S*", ""))
L'expression régulière correspond aux mots ne commençant pas par # et les remplace par une chaîne vide. La fonction de rognage nettoie les espaces supplémentaires possibles.
Ce qui précède fonctionne bien pour vos exemples, mais présente des défauts dans des situations plus complexes:
Breaking #news-in just now! A new photo #contest! Code name #as_shot (important underscore here). #something.
La commande ci-dessus retourne
#news-in #contest! #as_shot #something.
ne réalisant pas que les hashtags ne peuvent pas inclure -!.
(ils sont limités aux "caractères Word", A-Za-z0-9_). Donc, un autre regexreplace est nécessaire pour nettoyer. Je mets les deux dans une commande: une telle imbrication de regexreplace
est assez commune.
=regexreplace(trim(regexreplace(A2, "(^|\s)[^#]\S*","")), "[^#\w\s]\S*", "")
Le remplacement externe supprime les parties des hashtags du premier caractère qui n'est ni \w
ni # jusqu'à la fin. La sortie a des hashtags corrects:
#news #contest #as_shot #something
Il semble que les deux commandes regexreplace
puissent être combinées en une seule en lui donnant les deux expressions rationnelles ci-dessus comme alternatives. La logique de cette expression rationnelle combinée est plus difficile à suivre, mais cela a fonctionné dans tous les exemples que j'ai essayés.
=trim(regexreplace(A2, "((^|\s)[^#]\S*)|([^#\w\s]\S*)", ""))
L’autre alternative est de combiner split, join, repeat avec un extrait de regex comme ceci:
=join(" ",REGEXEXTRACT(A1,rept(".*(#\w+\S?\w+)",counta(split(A1,"#"))-1)))
il divise essentiellement le texte par #, puis répète la regex générique pour le capturer autant de fois que vous le souhaitez (-1 pour la cellule supplémentaire émise lorsque vous utilisez split). - Il est également possible d'inclure le caractère occasionnellement supplémentaire que vous pouvez rencontrer. à travers comme un - ou _ avec le\S?