Temukan dan ganti - Tambahkan carriage return ATAU Newline

183

Dalam kasus string berikut harus diuraikan.

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

Saya ingin mengganti ~~?dengan acarriage return

Mengganti dengan \nhanya menambahkan string"\n"

Bagaimana ini bisa dilakukan?

Mantisimo
sumber

Jawaban:

272

Pastikan "Gunakan: Ekspresi reguler" dipilih dalam dialog Temukan dan Ganti:

Temukan / Ganti Dialog Gunakan ekspresi reguler

Perhatikan bahwa untuk Visual Studio 2010, ini tidak berfungsi dalam ekstensi "Cari Cepat" Alat Daya Produktivitas Visual Studio (per pembaruan Juli 2011); sebagai gantinya, Anda harus menggunakan dialog Temukan dan Ganti penuh (gunakan Ctrl + Shift + H, atau Edit -> Temukan dan Ganti -> Ganti di File), dan ubah cakupan ke "Dokumen Saat Ini".

Martin
sumber
5
menggunakan tombol "Play" di sebelah kanan teks Find juga berguna
Cel
3
dan jika Anda mencoba untuk mencocokkan karakter khusus seperti tanda kurung jangan lupa untuk menggunakan misalnya \)ketika ekspresi reguler aktif ...
Cel
2
The ?karakter perlu melarikan diri di Regex karena itu menandakan bahwa elemen sebelumnya adalah opsional. Dengan demikian, teks "Temukan apa" yang benar ~~\?, dengan tanda tanya diloloskan oleh garis miring terbalik. Jawaban yang Anda berikan bekerja pada teks sampel karena dengan rakus akan menemukan tilde kedua dan mengkonsumsinya, namun jika tilde tunggal juga ada dalam teks di mana saja, itu juga akan diganti dengan baris baru dengan tidak tepat.
ErikE
Jika Productivity Power Tools diinstal, Anda masih dapat melakukan ctrl + shit + h dan kemudian ctrl + h untuk membuka jendela Visual Studio Find / Replace asli.
Neb
Perlu dicatat bahwa jika "Gunakan Ekspresi Reguler" dipilih, orang dapat menggunakan "\ n" untuk menemukan (dan mengganti) baris baru juga.
Jacob Lockard
28

Anda juga dapat mencoba \x0d\x0adi kotak "Ganti dengan" dengan kotak "Pakai Ekspresi reguler" dicentang untuk mendapatkan carriage return + line feed menggunakan Visual Studio Find / Replace. Menggunakan \n(umpan baris) sama dengan\x0a

Dekan
sumber
13

Jika Anda menetapkan bendera "Gunakan ekspresi reguler" maka \ n akan diterjemahkan. Tetapi perlu diingat bahwa Anda harus memodifikasi istilah pencarian Anda agar ramah regexp. Dalam kasus Anda itu harus melarikan diri seperti ini "\ ~ \ ~ \?" (tidak ada kutipan).

diasingkan
sumber
3
'~' tidak perlu melarikan diri di Regex. Ini karakter literal. Ini salah.
ErikE
12

Jika Anda ingin menghindari kerepotan lolos dari karakter khusus dalam string pencarian dan penggantian saat menggunakan ekspresi reguler, lakukan langkah-langkah berikut:

  1. Cari string asli Anda, dan ganti dengan "UniqueString42", dengan ekspresi reguler mati .
  2. Cari "UniqueString42" dan ganti dengan "UniqueString42 \ nUniqueString1337", dengan ekspresi reguler pada
  3. Cari "UniqueString42" dan ganti dengan baris pertama pengganti Anda (sering kali string asli Anda), dengan ekspresi reguler mati .
  4. Cari "UniqueString42" dan ganti dengan baris kedua pengganti Anda, dengan ekspresi reguler mati .

Perhatikan bahwa meskipun Anda ingin secara manual mencocokkan pich untuk pencarian dan penggantian pertama, Anda dapat menggunakan "ganti semua" dengan aman untuk tiga langkah terakhir.

Contoh

Misalnya, jika Anda ingin mengganti ini:

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

dengan itu:

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

Anda akan melakukan penggantian berikut:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(regex off ).
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(regex aktif ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(regex off ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(regex off ).
Suzanne Dupéron
sumber
@Alex Jika Anda memiliki solusi praktis untuk masalah ini yang menghindari keharusan menghindari pencarian Anda secara manual & mengganti teks ketika mengubahnya menjadi ekspresi reguler, dan menghabiskan 10 menit berikutnya memperbaiki monster yang dibuat dengan cara itu, saya akan sangat senang mendengarnya itu, karena jawaban saya hanyalah hack yang jelek. Tetapi seperti yang Anda lihat, semua jawaban lain yang bekerja pada vanilla Visual Studio tanpa plug-in tambahan memerlukan penggunaan ekspresi reguler, dan karenanya lolos dari teks sederhana.
Suzanne Dupéron
2
Maksud saya tidak buruk. Maaf, saya lupa tersenyum: D Untuk solusinya, tidak, saya tidak punya yang melibatkan VS. Tetapi saya menemukan bahwa setiap editor eksternal yang layak yang mendukung regex (notepad ++ dll) berfungsi dengan baik.
Alex
2
UltraEdit adalah raja pengganti pencarian - di sini Anda mencari baris baru, linebreak atau apa pun hanya dengan menandai garis-garis tersebut dan memulai pencarian. - Untuk mengganti Anda, masukkan ^ n untuk \ n, ^ r untuk \ r dan ^ t untuk \ t - jika hanya VS2010 yang akan melakukan hal yang sama :-)
Miros
Anda selalu dapat mengunjungi regex101.com untuk melihat apakah string pencarian Anda akan cocok dengan karakter literal atau ditafsirkan sebagai karakter kontrol Regex.
ErikE
7

Anda dapat menggunakan Pencarian dan Ganti Multiline di makro Visual Studio yang menyediakan GUI yang bagus untuk tugas tersebut.

masukkan deskripsi gambar di sini

Peter Macej
sumber
Tampaknya tidak berfungsi dengan Visual Studio 2017 tanpa beberapa langkah tambahan, yaitu harus mengklik "temukan di file" kemudian memodifikasi lingkup dialog itu, default pintasan adalah f # interaktif sekarang.
Mark Schultheiss