Come fare riferimento a un gruppo di acquisizione con regex trova e sostituisci in Visual Studio 2012, 2013, 2015 e VS Code


255

Mi rendo conto che ci sono un sacco di domande a riguardo, ma nessuna delle quali ho trovato fa specifico riferimento alla versione VS a cui si riferivano. Con quelle informazioni importanti carenti, non ero ancora in grado di utilizzare con successo le risposte che ho trovato. Il più comune era

  • Surround con {}, mostra l'acquisizione con \ 1, \ 2, \ n

Tuttavia, quello sembra essere il vecchio metodo di fare regex di ricerca e sostituzione in Visual Studio e non funziona in VS 2012.


1
Questo non è troppo difficile da trovare nella guida: nella finestra di dialogo Cerca / Sostituisci, F1; all'inizio della ricerca e sostituzione del testo è presente un collegamento all'utilizzo delle espressioni regolari in VS ; lì il secondo suggerimento fa riferimento a Sostituzioni in espressioni regolari ; lì ti dà le basi e dice che ci sono maggiori dettagli in Sostituzione di un gruppo numerato e Sostituzione di un gruppo nominato .
PJTraill,

2
@PJTraill è bello sapere che hanno reso più semplice rispondere a una domanda per la loro versione del 2012 tra il 2013 e il 2015. Secondo i voti, penso che sia abbastanza ovvio che non è ancora "non troppo difficile" trovare nell'aiuto. IMO: se è più facile cercare e votare un articolo di overflow dello stack piuttosto che usare trova, sostituisci, acquisisci senza cercare aiuto, allora è molto più difficile di quanto dovrebbe essere.
SgtPooki,

Una cosa che mi infastidisce di MSVS 2012/3 sono i due diversi dialoghi Cerca / Sostituisci, in particolare il più piccolo (Ctrl-H), dove continuo accidentalmente (con i tasti premuti che probabilmente significano qualcos'altro da qualche altra parte) alterando l'ambito della ricerca . Ma il punto che voglio sottolineare è che la finestra di dialogo più grande (Ctrl-Maiusc-H) ha dei pulsanti dopo i campi Trova e Sostituisci che ti danno un elenco delle possibilità più importanti, incluso quello che stai cercando, quindi non ho bisogno di aiuto! Immagino che molte persone non individuino i pulsanti o non finiscano nel dialogo Ctrl-H e non riescano a vederli.
PJTraill,

Sono d'accordo che l'aiuto è un po 'fastidioso da trovare; Ho il sospetto che diano priorità alla ricerca in testo semplice. Il mio punto è più che se uno sa o presume che debba essere lì, lo si può trovare ragionevolmente facilmente; spesso seguo quella strada, poiché preferisco usare la documentazione canonica una volta trovata. Non intendevo sembrare denigratorio; Penso che sia "troppo difficile" e "non troppo difficile" - non sono opposti se vedi "non troppo" come qualificativo "duro" e aggiungi la risposta all'implicito "difficile per cosa?".
PJTraill

"Sapevo" che il tagging REGEXP stava usando '()', Re ha letto la documentazione e non ha funzionato ... quindi sono venuto qui per essere sicuro ... poi ho fatto qualche altra sperimentazione e ha funzionato. Quindi IMHO la documentazione MSDN deve essere super chiara che () sono usati per "taggare" un'espressione, per quelli di noi che hanno dovuto imparare la vecchia nomenclatura "tag" VS6. Sarebbe bello se potessero usare quella stessa nomenclatura. Gruppi numerati ... semplicemente non accende abbastanza bene le sinapsi IMHO.
Ross Youngblood,

Risposte:


356

Per trovare e sostituire in VS 2012 e VS 2015, procedi come segue:

Esempio (grazie a syonip)

Nelle opzioni di ricerca, assicurati che l'opzione "usa espressioni regolari" sia selezionata e inserisci quanto segue come testo da trovare:

_platformActions.InstallApp\((.+)\)

E quanto segue come testo per sostituirlo con:

this.Platform().App($1).Install()

Nota: Come sottolinea SLaks in un commento di seguito, la modifica della sintassi regex è dovuta al passaggio da VS2012 al motore regex .Net standard.

Nota: un altro commentatore ha sottolineato che funziona anche in Visual Studio Code (vscode)


10
Per essere più generali, VS2012 ora utilizza il motore regex .Net standard.
SLaks,

4
Non è necessario sfuggire al carattere periodo tra _platformActionse InstallApp?
rory.ap,

Pensandoci ora, avrebbe senso. Non l'ho provato. Sentiti libero di inserire una modifica.
SgtPooki,

1
Alla fine ho usato il nome dato che il numerico sembra non funzionare per me almeno. (?<rval>.+)in cerca e in sostituzione${rval}
Mark Schultheiss,

2
Qualche aiuto in più: se vuoi sostituire la cosa (. *) Con la cosa $ 18 (aggiungendo un '8' direttamente dopo la cattura) dovrai usare la cosa $ {1} 8
Luc Bloom il

17

Per aggiungere un esempio di questo, ecco qualcosa che dovevo fare nel mio codice:

Trovare cosa:

_platformActions.InstallApp\((.+)\)

Sostituirlo con:

this.Platform().App($1).Install()

Questo sostituisce qualsiasi chiamata a InstallApp (x), con this.Platform (). App (x) .Install ().

* Non dimenticare di selezionare "Usa espressioni regolari" nelle opzioni Trova


10

Se vuoi lavorare con l'uso dei nomi di gruppo (usando lo stesso esempio di cui sopra):

Trovare cosa:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

Sostituirlo con:

this.Platform().App(${mygroupname}).Install()

9

Per migliorare le risposte di cui sopra: è necessario sostituire

_platformActions.InstallApp\((.+)\)

con

this.Platform().App(${1}).Install()

Fai attenzione a $ {1} se mai vuoi aggiungere un numero dietro l'acquisizione. $18proverà ad inserire la 18a acquisizione della ricerca, non la prima con un 8allegato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.