web-dev-qa-db-fra.com

Comment classer les données dans Google Spreadsheet à l'aide d'expressions régulières

J'essaie de classer certaines données dans une feuille de calcul Google.

  • J'ai "phrases à l'écran" dans la colonne A, onglet "Phrases". Par exemple "maison bleue"
  • J'ai "mots" dans la colonne A, onglet "Mots". Par exemple, "bleu"
  • J'ai "catégories" dans la colonne B, onglet "Mots". Par exemple, "couleur"

J'ai créé un exemple de fichier ici: Il existe également un lien vers un article connexe qui peut aider.

J'aimerais utiliser des expressions régulières en utilisant les mots de la colonne A pour faire correspondre certaines phrases en A, puis renvoyer la catégorie appropriée à partir de B.

Par exemple, j'aimerais trouver "bleu" dans "maison bleuâtre" et renvoyer "couleur". J'aimerais trouver "blanc" dans "super chaussures blanches" et retourner "couleur", mais pas quand suivi des chiffres. Par conséquent, je dois utiliser des expressions régulières.

J'utilise la formule suivante dans la colonne C TAB "phrases". Cela fonctionne, mais pas avec des expressions régulières. Il retourne le reg. expressions elle-même et ne peuvent pas correspondre à la catégorie.

=arrayformula(vlookup(arrayformula(iferror(regexextract(A2:A8,join("|",Words!$A$1:$A$7)))),Words!A$1:B,2,0))

J'ai essayé d'adapter la formule (du post connexe) dans la colonne D mais cela ne fonctionne pas.

3
G Adams

Alors voici ce que j’ai fait - j’ai ajouté à votre document une feuille intitulée SO Test - Aurielle.

J'ai ensuite fait une liste unique des catégories possibles dans la colonne B en utilisant:

=UNIQUE(Words!B:B)

Dans la colonne A, j'ai fait une jointure à l'aide de l'opérateur regex AND qui est | et j'ai utilisé la formule suivante:

=IF(ISTEXT(B2),JOIN("|",FILTER(Words!A:A,Words!B:B=B2)),)

Fondamentalement, le filtre limite la possibilité de combiner des mots-clés par leur valeur de catégorie.

Puis dans la colonne D, j'ai ajouté cette formule:

=IFERROR(INDEX(A$2:B,MATCH(TRUE,ARRAYFORMULA(REGEXMATCH(C2,INDIRECT("A"&2&":A"&3+COUNTA(B$2:B)))),0),2))

Fondamentalement, ce qui se passe ici, c’est que si vous le décomposez de l’extérieur, c’est que j’utilise ARRAYFORMULA avec REGEXMATCH - qui renvoie true ou false selon la ligne dans laquelle la valeur existe réellement.

J'utilise donc le mot VRAI comme clé pour la formule MATCH, puis, en utilisant INDEX, je le navigue pour extraire la ligne d'index et une colonne au-dessus, saisissant ainsi la catégorie.

REMARQUE: j'ai également ajouté une formule INDIRECT supplémentaire à cet emplacement pour calculer le nombre de valeurs réellement présentes dans la colonne B, de sorte que votre formule s'adapte de manière dynamique au nombre de lignes dont il a besoin.

enter image description here

2
Aurielle Perlmann