web-dev-qa-db-fra.com

Langage de requête de feuille de calcul Google, correspondance en utilisant regex?

J'ai une formule query qui examine une table et extrait des noms, par exemple:

   A                   B
1  john, andrew     blah
2  drew, mike       blah

Je veux qu'il me montre toutes les lignes qui impliquent drew, la formule de requête est select where A contains 'drew'. Les deux lignes s'afficheraient, car andrew contient drew, mais si j'utilise la formule select where A = 'drew', rien ne s'affiche car il recherche une correspondance exacte. Qu'est-ce que je fais ici? Je pensais que peut-être une expression régulière aiderait, mais comment pourrais-je le faire?

6
jason

Pour gérer les limites de Word, vous avez besoin de where A matches au lieu de _where A contains_. Il permet l’utilisation d’expressions régulières telles que _.*\bdrew\b.*_, qui signifie

  • contenant la chaîne "drew"
  • avec des limites de mots _\b_ à gauche et à droite de la chaîne (c.-à-d. que les caractères adjacents ne peuvent pas être des caractères Word)
  • avec tout autre caractère ailleurs dans la chaîne: _.*_

La dernière puce est nécessaire car la logique de matches requiert que tout le contenu de A corresponde à l'expression donnée (contrairement à la fonction regexmatch qui tentera de faire correspondre les sous-chaînes).

Donc, dans votre cas, ce serait

_=query(A:B, "select * where A matches '.*\bdrew\b.*'")
_

ou, si vous souhaitez également faire correspondre "Drew" (insensible à la casse), puis

_=query(A:B, "select * where lower(A) matches '.*\bdrew\b.*'")
_
7
user79865