web-dev-qa-db-fra.com

Recherche dans VS Code pour plusieurs termes

Supposons que je recherche sur VS Code les termes "Word1 Word2". Ensuite, il trouve toutes les occurrences où "Word1" est suivi de "Word2". En réalité, je veux trouver tous les fichiers où Word1 et Word2 se produisent, mais ils ne doivent pas nécessairement être consécutifs. Comment puis-je le faire?

14
becko

Utilisez le drapeau regex et recherchez (Word1[\s\S\n]*Word2)|(Word2[\s\S\n]*Word1)

22
Alex

VSCode a un problème ouvert pour prendre en charge plusieurs recherches. Vous voudrez peut-être y aller et les pousser un peu.

5
pushkin

Pour vous les gars,

si vous souhaitez rechercher plusieurs mots (plus de 2) à la fois dans un seul fichier et que tous les mots doivent apparaître dans le fichier au moins une fois (ET logique), vous pouvez utiliser l'expression rationnelle suivante qui exploite les assertions d'anticipation:

^(?=[\s\S\n]*(Word1))(?=[\s\S\n]*(Word2))(?=[\s\S\n]*(Word3))(?=[\s\S\n]*(Word4))[\s\S\n]*$

Une recherche globale avec ce modèle ne retournera que tous les fichiers contenant Word1 ET Word2 ET Word3 ET Word4 Dans n'importe quel ordre (par exemple Word4 peut apparaître au début et/ou Word2 peut apparaître à la fin du fichier).

J'ai également écrit un petit Python CLI qui crée automatiquement l'expression régulière pour vous compte tenu des modèles que vous souhaitez ET (bien que la création de l'expression régulière à la main soit assez simple).

Copiez le code suivant, collez-le dans un nouveau fichier et enregistrez-le quelque part sur votre machine (je l'ai appelé regex_and_lookahead.py). Rendez ensuite le fichier exécutable avec chmod +x ./regex_and_lookahead.py (Important, j'ai utilisé Python 3.6, le préfixe littéral f -> f'(?=[\s\S\\n]*({arg}))' ne sera pas travailler dans les versions précédentes):

#!/usr/bin/env python
from sys import argv

args = argv[1:]
regex = '^'
for arg in args:
    regex += f'(?=[\s\S\\n]*({arg}))'
regex += '[\s\S\\n]*$'

print(regex)

Usage:

./regex_and_lookahead.py Word1 Word2 Word3 Word4

Générera l'expression régulière ci-dessus. Vous pouvez également l'utiliser pour générer des expressions rationnelles plus complexes car chaque paramètre peut contenir des caractères d'expression régulière!

Par exemple:

./regex_and_lookahead.py "pattern with space" "option1|option2" "\bword3\b" "(repeated pattern\.){6}"

Générera l'expression régulière suivante:

^(?=[\s\S\n]*(pattern with space))(?=[\s\S\n]*(option1|option2))(?=[\s\S\n]*(\bword3\b))(?=[\s\S\n]*((repeated pattern\.){6}))[\s\S\n]*$

Qui correspondra à un fichier si et seulement si tous des conditions suivantes sont remplies:

  • Il y a au moins une occurrence de la chaîne pattern with space;
  • Il y a au moins une occurrence de option1 Ou option2;
  • Il y a au moins une occurrence du mot Word3 Délimité par des affirmations de limites de Word;
  • Il y a au moins une occurrence de la chaîne repeated pattern. Répétée 6 fois (c'est-à-dire: repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.).

Comme vous pouvez le voir, le ciel est la seule limite. S'amuser!

1
tonix