2011-10-21 16 views
26

In Visual Studio, quando eseguo una ricerca all'interno di una selezione, desidero sostituire la prima istanza (o la seconda, la terza, ecc.) Di una corrispondenza per riga utilizzando le espressioni regolari. Come lo farei?Cerca e sostituisci in Visual Studio

Ricerca e sostituzione

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

in quanto segue.

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

risposta

33

In Visual Studio 2010 e precedenti, usare le espressioni regolari con riferimenti all'indietro

Le espressioni regolari di Visual Studio sono completamente diverse da ciò che ho imparato. Mi ci è voluto un po 'di tempo per capire la risposta corretta.

Cerca

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

Sostituire con

\1\2 = bar\2 

riferimenti posteriore sono fatte da tagging con parentesi graffe {foo}. :d+ è lo stesso per \d+

Read more about VS RegEx here

+0

Questa regex non verrà restituita? bar1 = bar1; bar2 = bar2; ... bar20 = bar20; – San

+0

No, non lo farebbe. Mi sono perso qualcosa? –

+0

Hai modificato il tuo post? Ricordo un'altra versione. Questo va bene =) – San

2

posso essere fatto senza un'espressione regolare così:

Sostituire = foo con = bar.

Se è necessaria un'espressione regolare, si potrebbe usare:

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

Sostituire con:

foo\1 = bar\2; 
+0

Questo non sarebbe in realtà funziona perché '\ d' non è un personaggio accettato in Visual Studio. –

+2

I riferimenti a ritroso per la sostituzione devono utilizzare '$ 1', non' \ 1', almeno nel 2012 rispetto a. – mbomb007

+0

Questo è per le versioni precedenti di Visual Studio precedenti al 2012. Per le versioni più recenti, vedere la risposta a questa domanda: https://stackoverflow.com/questions/3147096/visual-studio-find-and-replace-regex/3147177#3147177 – paulwesterberg

-1

Se vuoi essere più variabile:

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

Questa ricerca di = e (anynumber); e sostituire quella tra.

Modifica: Il numero è facoltativo.

+1

Questa domanda riguarda l'utilizzo del modulo Trova/Sostituisci di Visual Studio, non di VB. – mbomb007

70

In Visual Studio 2012, i gruppi di cattura e i riferimenti secondari vengono utilizzati proprio come in C#. Puoi catturarli con una parentesi comune e retrocarli con $ 0, $ 1, ecc. Spero che aiuti!

Si noti che la sintassi $1 viene utilizzata per trovare la sostituzione, ma \1 viene utilizzata per i riferimenti secondari nella stringa di ricerca.

+2

Stavo per trarre la conclusione che le sottotransfer erano state rimosse da Visual Studio 2012 fino a quando non ho letto questa risposta. Non è affatto menzionato nella documentazione ufficiale http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx –

+1

Solo per elaborare un esempio per VS 2012, un registro. exp. per rimuovere le virgolette circostanti da elementi di testo in un documento XML: _Find box_: **> "(*)." <** _Replace box_: **> $ 1 <** –

+2

Huzzah per appropriate espressioni regolari in VS 2012! Questo è enorme! –

Problemi correlati