Trova e sostituisci: aggiungi ritorno a capo o Newline


183

Nel caso della seguente stringa da analizzare.

ford mustang,10,blue~~?bugatti veyron,13,black

Voglio sostituire il ~~?con acarriage return

La sostituzione con \naggiunge semplicemente la stringa"\n"

Come si può fare?

Risposte:


272

Assicurati che "Usa: espressioni regolari" sia selezionato nella finestra di dialogo Trova e sostituisci:

Finestra di dialogo Trova / sostituisci Usa espressioni regolari

Si noti che per Visual Studio 2010 non funziona con l' estensione "Ricerca rapida" di Visual Studio Productivity Power Tools (a partire dall'aggiornamento di luglio 2011); invece, dovrai usare la finestra di dialogo Trova e sostituisci completa (usa Ctrl + Maiusc + H o Modifica -> Trova e sostituisci -> Sostituisci in file) e cambia l'ambito in "Documento corrente".


5
anche usare il pulsante "Riproduci" a destra del testo Trova è utile
— Cel

3
e se stai cercando di abbinare caratteri speciali come le parentesi non dimenticare di usare ad esempio \)quando sono attive le espressioni regolari ...
— Cel

2
Il ?personaggio deve essere evaso in Regex perché significa che l'elemento precedente è facoltativo. Pertanto, il testo corretto "Trova cosa" è ~~\?, con il punto interrogativo sfuggito da una barra rovesciata. La risposta che hai dato funziona sul testo di esempio perché troverà avidamente la seconda tilde e la consumerà, tuttavia se una singola tilde esiste anche nel testo ovunque, verrà erroneamente sostituita con una nuova riga.
— ErikE,

Se è installato Productivity Power Tools, è ancora possibile fare ctrl + merda + h e quindi ctrl + h per aprire la finestra Trova / Sostituisci nativa di Visual Studio.
— Neb

Va notato che se si seleziona "Usa espressioni regolari", è possibile utilizzare "\ n" per trovare (e sostituire) anche le nuove righe.
— Jacob Lockard,

28

Puoi anche provare \x0d\x0anella casella "Sostituisci con" con la casella "Usa espressione regolare" selezionata per ottenere il ritorno a capo + avanzamento riga usando Trova / Sostituisci di Visual Studio. L'uso di \n(avanzamento riga) è uguale a\x0a


13

Se imposti il ​​flag "Usa espressioni regolari", allora \ n verrebbe tradotto. Ma tieni presente che dovresti modificare il termine di ricerca per renderlo compatibile con regexp. Nel tuo caso dovrebbe essere sfuggito in questo modo "\ ~ \ ~ \?" (senza virgolette).


3
Non è necessario sfuggire a '~' in Regex. È un personaggio letterale. Questo non è corretto
— ErikE,

12

Se si desidera evitare il fastidio di sfuggire ai caratteri speciali nella stringa di ricerca e sostituzione quando si utilizzano espressioni regolari, attenersi alla seguente procedura:

  1. Cerca la tua stringa originale e sostituiscila con "UniqueString42", con le espressioni regolari disattivate .
  2. Cerca "UniqueString42" e sostituiscilo con "UniqueString42 \ nUniqueString1337", con espressioni regolari su
  3. Cerca "UniqueString42" e sostituiscilo con la prima riga della sostituzione (spesso la stringa originale), con le espressioni regolari disattivate .
  4. Cerca "UniqueString42" e sostituiscilo con la seconda riga della sostituzione, con le espressioni regolari disattivate .

Si noti che anche se si desidera effettuare manualmente il pich delle corrispondenze per la prima ricerca e la sostituzione, è possibile utilizzare in modo sicuro "Sostituisci tutto" per gli ultimi tre passaggi.

Esempio

Ad esempio, se si desidera sostituire questo:

public IFoo SomeField { get { return this.SomeField; } }

con quello:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

Faresti le seguenti sostituzioni:

  1. public IFoo SomeField { get { return this.SomeField; } }→ XOXOXOXO(regex off ).
  2. XOXOXOXO→ XOXOXOXO\nHUHUHUHU(regex on ).
  3. XOXOXOXO→ public IFoo Foo { get { return this.MyFoo; } }(regex off ).
  4. HUHUHUHU→ public IFoo Bar { get { return this.MyBar; } }(regex off ).

@Alex Se hai una soluzione pratica a questo problema che evita di dover sfuggire manualmente alla tua ricerca e sostituire il testo quando lo trasforma in espressioni regolari e passare i prossimi 10 minuti a riparare il mostro creato in quel modo, sarei molto felice di sentire esso, poiché la mia risposta è solo un brutto trucco. Ma come puoi vedere, tutte le altre risposte che funzionano su un Visual Studio vanilla senza plug-in aggiuntivi richiedono l'uso di espressioni regolari e quindi sfuggono al semplice testo.
— Suzanne Dupéron,

2
Non intendevo in senso negativo. Mi scuso di aver dimenticato di mettere una faccina: D Per quanto riguarda una soluzione, no non ne ho una che coinvolge VS. Ma ho scoperto che qualsiasi editor esterno decente che supporta regex (notepad ++ ecc.) Funziona abbastanza bene.
— Alex

2
UltraEdit è il re della ricerca sostitutiva: qui cerchi nuove linee, interruzioni di riga o altro semplicemente contrassegnando quelle linee e avviando la ricerca. - Per quanto riguarda la sostituzione, inserisci ^ n per \ n, ^ r per \ r e ^ t per \ t - se solo VS2010 farebbe lo stesso :-)
— Miros,

Puoi sempre visitare regex101.com per vedere se la tua stringa di ricerca corrisponderà a caratteri letterali o verrà interpretata come caratteri di controllo Regex.
— ErikE,

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.