2011-10-21 4 views
26

Dans Visual Studio, lorsque je recherche dans une sélection, je souhaite remplacer la première instance (ou deuxième, troisième, etc.) d'une correspondance par ligne à l'aide d'expressions régulières. Comment ferais-je cela?Rechercher et remplacer dans Visual Studio

Rechercher et remplacer

foo1 = foo1; 
foo2 = foo2; 
... 
foo20 = foo20; 

dans ce qui suit.

foo1 = bar1; 
foo2 = bar2; 
... 
foo20 = bar20; 

Répondre

33

Dans Visual Studio 2010 et plus tôt, utiliser des expressions régulières avec des références arrières

Les expressions régulières de Visual Studio sont complètement différentes de ce que j'ai appris. Il m'a fallu du temps pour trouver la bonne réponse.

Rechercher

{foo}{:d+} = \1\2 

Remplacer par

\1\2 = bar\2 

références Retour sont faites par tagging avec des accolades {foo}. :d+ est la même pour \d+

Read more about VS RegEx here

+0

Cette regex ne serait-elle pas renvoyée? bar1 = bar1; bar2 = bar2; ... bar20 = bar20; – San

+0

Non, ce ne serait pas. Ai-je manqué quelque chose? –

+0

Avez-vous modifié votre message? Je me souviens d'une autre version. Celui-ci est correct =) – San

2

je peux être fait sans une expression régulière ainsi:

Remplacer = foo avec = bar.

Si une expression régulière est nécessaire, on peut utiliser:

foo(\d*) = foo(\d*); 

Remplacer par:

foo\1 = bar\2; 
+0

Cela ne fonctionnerait pas en réalité parce que '\ d' n'est pas un caractère accepté dans Visual Studio. –

+2

Les références arrières pour remplacer le besoin d'utiliser «$ 1», pas «\ 1», vs 2012 au moins. – mbomb007

+0

Ceci est pour les anciennes versions antérieures à 2012 de Visual Studio. Pour les versions plus récentes, voir la réponse à cette question: https://stackoverflow.com/questions/3147096/visual-studio-find-and-replace-regex/3147177#3147177 – paulwesterberg

-1

Si vous seriez plus variable:

Regex.Replace(input, @"(?<=\=)[^;0-9]*(?=[0-9]*;)", replacewith); 

Cette recherche de = et (anynumber); et le remplacer entre.

Editer: Le numéro est facultatif.

+1

Cette question concerne l'utilisation du module Rechercher/Remplacer de Visual Studio, et non de VB. – mbomb007

70

Dans Visual Studio 2012, les groupes de capture et les backreferences sont utilisés de la même manière qu'en C#. Vous pouvez les capturer avec des parenthèses communes, et les renvoyer avec $ 0, $ 1, etc. J'espère que ça aide!

Notez que la syntaxe $1 est utilisée pour la recherche-remplacement, mais que \1 est utilisée pour les références arrière dans la chaîne de recherche.

+2

J'étais sur le point de conclure que les références arrières avaient été retirées de Visual Studio 2012 jusqu'à ce que je lise cette réponse. Il n'est pas mentionné du tout dans la documentation officielle http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx –

+1

Juste pour élaborer avec un exemple pour VS 2012, un reg. exp. pour supprimer les citations environnantes des éléments de texte dans un document XML: _Find box_: **> "(. *)" <** _Remplacer box_: **> $ 1 <** –

+2

Huzzah pour des expressions régulières correctes dans VS 2012! C'est énorme! –

Questions connexes