Gunakan Notepad ++ untuk mengubah under_score_case ke CamelCase?

19

Saya dapat menulis ekspresi reguler di NP ++ untuk menemukan under_score_case. Saya bisa menggunakan TextFX di NP ++ untuk mengubah huruf besar dan kecil dengan menyorot dan memilih.

Bagaimana saya bisa menggunakan Temukan / Ganti NP ++ atau temukan dan ganti TextFX untuk menjahit ini bersama dan dikonversi under_score_caseke camelCase?

Saya ingin belajar bagaimana melakukan ini di NP ++ tidak menggunakan skrip.

Input sampel:

this is_a_line
some more_data_over_here
whoop de_do_da

Output yang diinginkan:

this isALine
some moreDataOverHere
whoop deDoDa

Regex yang cocok dengan garis bawah akan _([a-z]). Pengganti yang saya pikir ada, tetapi saya tidak dapat menemukan sesuatu seperti _\toupper\1.

Freiheit
sumber

Jawaban:

6

Saya punya solusi yang panjang dan berbelit-belit, tetapi akan bekerja di Notepad ++. Itu membutuhkan penggunaan regex, pencarian dan penggantian opsional opsional, serta TextFX.

  1. Tambahkan karakter pengganti ke bagian depan setiap kata, saya pilih Z. Mungkin tidak harus alfabet, tetapi lebih mudah untuk langkah terakhir. Menggunakan regex, cari \<([^ ]*)\>dan ganti dengan Z\1.
  2. Ganti ruang yang ada dengan urutan placeholder yang unik. Saya memilih # space #. Ini bisa dilakukan dengan regex, tapi saya lebih suka menggunakan normal atau diperluas.
  3. Ganti garis bawah dengan spasi. Jika ada garis bawah yang tidak boleh diganti, mungkin diperlukan regex khusus. Saya baru saja melakukan pencarian langsung dan ganti.
  4. Pilih semua teks, dan dari menu TextFX, pilih TextFX Characters -> Proper Case.
  5. Sekarang kita perlu membalik 3 langkah pertama. Cari spasi, dan gantikan dengan apa-apa. Kemudian cari urutan penampung ruang Anda, dan ganti dengan spasi. Akhirnya, menggunakan regex, cari \<Z([^ ]*)\>dan ganti dengan \1.
MBraedley
sumber
Berbelit-belit, tetapi berhasil.
Freiheit
Kegagalan Notepad ++ dengan regex telah menyebabkan saya menemukan solusi seperti ini sebelumnya, khususnya ketika saya perlu mencari dan mengganti lintas baris atau menggunakan karakter khusus, seperti tab.
MBraedley
Sebagai tambahan, apakah proyek memimpin pada NP ++ (Tuan Ho seingat saya) membuat suara tentang memperkenalkan dukungan penggantian mirip-vim? Adakah plugin untuk mendukung itu? NP ++ dan TextFX sangat kuat, mereka hanya perlu sedikit lebih banyak untuk menyatukannya.
Freiheit
Saya tidak benar-benar mengikuti proyek, tetapi saya membayangkan bahwa dia terkendala oleh penggunaan Scintilla.
MBraedley
1
Satu peringatan: Jika karakter kedua dan selanjutnya dalam setiap kata adalah huruf besar, itu dibuat huruf kecil, misalnya ALL_CAPSmenjadi allCaps.
Gnubie
15

Cari / ganti sederhana akan melakukan ini di NP ++:

Menemukan: [_]{1,1}([a-z])

Menggantikan: \U$1

Anda harus memilih tombol radio 'Ekspresi reguler' di panel Ganti agar ini berfungsi.

eurono
sumber
5
Atau sama _(.)seperti string pencarian.
Dominic Comtois
Jika Anda ingin PascalCase (dalam satu langkah) Anda dapat menggunakan Temukan: (?:^|_)([a-z]) Ganti: \U$1$2
Rubenisme
6

Saya biasanya menggunakan vim sendiri sebagai editor. Ekspresi reguler berikut menyelesaikan apa yang Anda coba lakukan di vim:

%s/_\([a-zA-Z]\)/\u\1/g

Dari apa yang saya tahu ( saya bermain-main dengan NP ++ sebentar ), Notepad ++ tidak mengerti makro huruf besar \udi Perl Regexp. Anda mungkin tidak dapat melakukan ini sepenuhnya dengan Notepad ++. Semoga seseorang akan membuktikan saya salah dan membuat hari Anda menyenangkan.

Sean C.
sumber
Ya saya terjebak di lingkungan Windows. Menyalin data ke mesin * nix atau OS X bekerja, tetapi tidak anggun. Saya juga bisa melatih tim lain di NP ++.
Freiheit
Saya pikir ungkapan yang sama berfungsi di eMacs. Pengetahuan eMac saya kabur. . .
surfasb
@Freiheit Ada vim untuk windows; walaupun itu tidak akan membantu dengan crosstraining rekan setim lainnya ke NP ++
Matrix Mole
Ini sebenarnya bekerja dengan baik di Notepad ++ versi terbaru (Saya menggunakan 6.7.7).
levant pied
3

Anda dapat melakukan ini dengan satu langkah di notepad ++, yang mungkin lebih berguna:

Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

Satu-satunya masalah dengan ini, adalah bahwa Anda perlu mengetahui waktu maks skor di bawah dapat hadir dan bagaimana string berakhir. Dalam contoh di atas, saya mengganti nama file php ke camelCase, mengetahui bahwa skor di bawah tidak dapat hadir lebih dari 3 kali, lebih sedikit tidak ada masalah.

Termasuk33
sumber
2

Favorit pribadi saya adalah sed. Ini cepat kilat:

> echo make_me_camel_case_please | sed -e 's / (_ [az]) / \ U \ 1 / g' -e 's / _ // g'

makeMeCamelCasePlease

Anda dapat menggunakan opsi -i untuk melakukan penggantian pada file yang sedang Anda edit dan N ++ harus mengambil perubahan.

Ini juga akan menghapus semua garis bawah, seperti beberapa solusi di atas. Itu bisa diperbaiki jika ini masalah.

Kapten Lepton
sumber
2
  • Ubah case ular Saya bisa melakukan ini menggunakan Notepad ++, mengikuti langkah-langkah di bawah ini.

  • Konversikan input case ular ke semua huruf kecil, jika belum dalam huruf kecil

  • Buka formulir Ganti ( Cari-> Ganti ATAU Ctrl + H )
  • Periksa tombol radio Ekspresi Reguler
  • Cari _([a-z])ATAU_(.)
  • Ganti dengan \u\1input
Rathishkumar Nair
sumber
0

Saya bekerja dengan Notepad ++ 7.3. Saya memiliki masalah yang sama dan saya melakukan yang berikut:

  1. Ctrl+ H(tampilkan formulir pencarian)
  2. Periksa tombol radio Ekspresi Reguler
  3. Cari «_ ([az] +)»
  4. Ganti dengan «\ u \ 1»

Dan berhasil!

Francisco M.
sumber
Jadi ini akan mengubah semua huruf menjadi huruf kecil, dan kemudian huruf besar huruf yang mengikuti garis bawah, kan? Jadi We use the bean_counter variable, which was Fred's ideaapakah akan diubah menjadi we use the beanCounter variable, which was fred's idea(menurunkan huruf yang sudah dikapitalisasi)? Ini sepertinya tidak memuaskan.
Scott
Terima kasih, scott, saya tidak sepenuhnya memahami ide itu, jadi saya harap sekarang semuanya akan baik-baik saja.
Francisco M
Ya itu lebih baik. Anda mungkin bisa menyederhanakannya sedikit: cari saja «_ ([az])» (tanpa +). Sayangnya, ini sekarang pada dasarnya setara dengan beberapa jawaban sebelumnya.
Scott