web-dev-qa-db-fra.com

Rechercher et extraire des mots / noms d'une chaîne commençant par un caractère spécifique

J'ai quelques lignes dans Google Sheets qui contiennent des chaînes. Je veux extraire certaines parties de cette chaîne et les entrer dans une autre cellule:
spécifiquement, Je veux extraire des mots/noms commençant par le caractère "@" .

Par exemple, dans la chaîne "Bonjour @Henry comment allez-vous", je veux que la cellule suivante affiche uniquement "@Henry", en supprimant tous les autres mots.

Il y a aussi des cas où il y a plusieurs noms commençant par @ et je voudrais que tous ces noms soient retournés (de préférence dans des colonnes séparées).

Est-ce que quelqu'un peut m'aider avec ça?

Modifier: feuille de calcul factice ci-dessous:

https://docs.google.com/spreadsheets/d/1TupcKRHHi94Q3OLmZS0-eEWNwbEZF90gjymoyem3GFI/edit?usp=sharing

2
Henry Petch

La fonction LEFT vous permet de trouver des valeurs à partir de la sommation de gauche à droite et la fonction RIGHT fait exactement le contraire. La fonction FIND est de trouver à quelle position exactement le texte que vous voulez. Il commence automatiquement à compter les caractères pour LEFT ou RIGHT. Et la fonction LEN consiste à compter la valeur totale des caractères qui existent dans une cellule, vous devez donc l'utiliser dans la fonction RIGHT, car vous devez compter la valeur totale des caractères moins le position que vous cherchez à séparer.

enter image description hereenter image description hereenter image description here

1
Brondby IF

Vous pouvez également utiliser ceci formule robuste unique dans la cellule B2:

=IFERROR(ArrayFormula(if(LEN(A2:A),TRIM(SPLIT(
                 REGEXREPLACE(TRANSPOSE(SPLIT(TRANSPOSE(ArrayFormula(join("♣︎", A2:A))),"♣︎")),"(?:.?(@[A-Z][a-z]\b))|(.*)","$1"&" ")," ")
                        ),"")),"")

ne formule encore plus simple peut être utilisé si vous n'avez pas de lignes vides entre vos réponses:

=ArrayFormula(TRIM(SPLIT(
         REGEXREPLACE(TRANSPOSE(SPLIT(TRANSPOSE(ArrayFormula(join("♣︎", A2:A))),"♣︎")),"(?:.?(@[A-Z][a-z]\b))|(.*)","$1"&" ")," ")))
2
marikamitsos

En utilisant split + a filter vous pouvez extraire les mots avec le modèle dont vous avez besoin: @ + upper case + whatever

=transpose(
      filter(
             transpose(SPLIT(A2," ")),
             REGEXMATCH(transpose(SPLIT(A2," ")),"@[A-Z]")
             )
)
0
pjmg