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?
Utilisez le drapeau regex et recherchez (Word1[\s\S\n]*Word2)|(Word2[\s\S\n]*Word1)
VSCode a un problème ouvert pour prendre en charge plusieurs recherches. Vous voudrez peut-être y aller et les pousser un peu.
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:
pattern with space
;option1
Ou option2
;Word3
Délimité par des affirmations de limites de Word;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!