Sử dụng Notepad ++ để thay đổi under_score_case thành CamelCase?


19

Tôi có thể viết một biểu thức chính quy trong NP ++ để tìm under_score_case. Tôi có thể sử dụng TextFX trong NP ++ để thay đổi chữ hoa thành chữ hoa và chữ thường bằng cách tô sáng và chọn.

Làm cách nào tôi có thể sử dụng Tìm / Thay thế hoặc Tìm và thay thế văn bản của NP ++ để ghép chúng lại với nhau và chuyển đổi under_score_casethành camelCase?

Tôi muốn tìm hiểu làm thế nào để làm điều này trong NP ++ không sử dụng tập lệnh.

Đầu vào mẫu:

this is_a_line
some more_data_over_here
whoop de_do_da

Kết quả mong muốn:

this isALine
some moreDataOverHere
whoop deDoDa

Regex để phù hợp với dấu gạch dưới sẽ là _([a-z]). Sự thay thế mà tôi nghĩ tồn tại, nhưng tôi không thể tìm thấy là một cái gì đó như thế _\toupper\1.

Câu trả lời:


6

Tôi có một giải pháp lâu dài và phức tạp, nhưng sẽ hoạt động trong Notepad ++. Nó yêu cầu sử dụng regex, tùy chọn tìm kiếm và thay thế bình thường, cũng như TextFX.

  1. Thêm một ký tự giữ chỗ vào trước mỗi từ, tôi đã chọn Z. Nó có thể không phải là chữ cái, nhưng bước cuối cùng dễ dàng hơn. Sử dụng regex, tìm kiếm \<([^ ]*)\>và thay thế bằng Z\1.
  2. Thay thế các không gian hiện có bằng một trình giữ chỗ duy nhất. Tôi đã chọn # không gian #. Điều này có thể được thực hiện với regex, nhưng tôi thích sử dụng bình thường hoặc mở rộng.
  3. Thay thế dấu gạch dưới bằng dấu cách. Nếu có bất kỳ dấu gạch dưới nào không nên thay thế, thì có thể cần một regex tùy chỉnh. Tôi chỉ cần làm một tìm kiếm thẳng và thay thế.
  4. Chọn tất cả văn bản và từ menu TextFX, chọn TextFX Characters -> Proper Case.
  5. Bây giờ chúng ta cần đảo ngược 3 bước đầu tiên. Tìm kiếm không gian, và thay thế chúng không có gì. Sau đó tìm kiếm trình tự giữ chỗ không gian của bạn và thay thế bằng một khoảng trắng. Cuối cùng, sử dụng regex, tìm kiếm \<Z([^ ]*)\>và thay thế bằng \1.

Kết luận, nhưng nó hoạt động.
Freiheit

Thất bại của Notepad ++ với regex đã khiến tôi phải đưa ra các giải pháp như thế này trước đây, cụ thể là khi tôi cần tìm và thay thế trên các dòng hoặc sử dụng các ký tự đặc biệt, như tab.
MBraedley

Bên cạnh đó, việc dẫn dắt dự án trên NP ++ (ông Hồ như tôi nhớ lại) có gây ra tiếng động nào về việc giới thiệu hỗ trợ thay thế giống như vim không? Bất kỳ plugin để hỗ trợ đó? NP ++ và TextFX thực sự mạnh mẽ, họ chỉ cần thêm một chút để gắn chúng lại với nhau.
Freiheit

Tôi không thực sự theo dõi dự án, nhưng tôi tưởng tượng rằng anh ta bị hạn chế bởi việc sử dụng Scintilla.
MBraedley

1
Một cảnh báo: Nếu ký tự thứ hai và tiếp theo trong mỗi từ là một chữ cái viết hoa, nó được viết thường, ví dụ như ALL_CAPStrở thành allCaps.
Gnubie

15

Một tìm kiếm / thay thế đơn giản sẽ làm điều này trong NP ++:

Tìm thấy: [_]{1,1}([a-z])

Thay thế: \U$1

Bạn cần chọn nút radio 'Biểu thức chính quy' trong bảng Thay thế để thao tác này hoạt động.


5
Hoặc chỉ _(.)là chuỗi tìm kiếm.
Đaminh Comtois

Nếu bạn muốn PascalCase (trong một bước), bạn có thể sử dụng Tìm: (?:^|_)([a-z]) Thay thế: \U$1$2
Rubenisme

6

Tôi thường sử dụng vim mình như một biên tập viên. Biểu thức chính quy sau đây thực hiện những gì bạn đang cố gắng thực hiện trong vim:

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

Từ những gì tôi có thể nói ( tôi đã đánh lừa xung quanh với NP ++ một chút ), Notepad ++ không hiểu macro chữ hoa \utrong Perl Regapi. Bạn có thể không thể làm điều này hoàn toàn với Notepad ++. Hy vọng, ai đó sẽ chứng minh tôi sai và làm cho ngày của bạn.


Phải, tôi bị mắc kẹt trong môi trường Windows. Sao chép dữ liệu sang máy * nix hoặc OS X hoạt động, nhưng hầu như không duyên dáng. Tôi cũng có thể đào tạo chéo các đồng đội khác trên NP ++.
Freiheit

Tôi nghĩ rằng biểu hiện tương tự hoạt động trong eMacs. Kiến thức eMac của tôi là mơ hồ. . .
Surfasb

@Freiheit Có một vim cho windows; mặc dù điều đó sẽ không giúp ích gì cho việc liên kết các đồng đội khác với NP ++
Mole Matrix

Điều này thực sự có vẻ hoạt động tốt trong các phiên bản gần đây của Notepad ++ (Tôi đang sử dụng 6.7.7).
levant đâm vào

3

Bạn có thể làm điều này với một bước trong notepad ++, có lẽ hữu ích hơn:

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

Vấn đề duy nhất với điều này là bạn cần biết thời gian tối đa có thể có mặt và điểm kết thúc của chuỗi. Trong ví dụ trên, tôi đang thay thế tên tệp php thành camelCase, biết rằng điểm dưới có thể xuất hiện nhiều hơn 3 lần, ít hơn không có vấn đề gì.


2

Yêu thích cá nhân của tôi là sed. Nó nhanh như chớp:

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

makeMeCamelCasePlease

Bạn có thể sử dụng tùy chọn -i để thực hiện thay thế trên tệp bạn đang chỉnh sửa và N ++ sẽ nhận thay đổi.

Điều này cũng sẽ xóa tất cả các dấu gạch dưới, như với một số giải pháp ở trên. Điều đó có thể được sửa chữa nếu đây là một vấn đề.


2
  • Chuyển đổi trường hợp con rắn Tôi có thể làm điều này bằng Notepad ++, làm theo các bước dưới đây.

  • Chuyển đổi đầu vào trường hợp con rắn sang tất cả chữ thường, nếu chưa có chữ thường

  • Mở biểu mẫu Thay thế (Tìm kiếm-> Thay thế HOẶC Ctrl + H )
  • Kiểm tra nút radio Biểu thức thông thường
  • Tìm kiếm _([a-z])HOẶC_(.)
  • Thay thế bằng \u\1đầu vào

0

Tôi làm việc với Notepad ++ 7.3. Tôi đã có cùng một vấn đề và tôi đã làm như sau:

  1. Ctrl+ H(hiển thị biểu mẫu tìm)
  2. Kiểm tra nút radio Biểu thức thông thường
  3. Tìm «_ ([az] +)»
  4. Thay thế bằng «\ u \ 1»

Và đã làm việc!


Vì vậy, điều này sẽ thay đổi tất cả các chữ cái thành chữ thường, và sau đó viết hoa các chữ cái theo dấu gạch dưới, phải không? Vì vậy, We use the bean_counter variable, which was Fred's ideasẽ được thay đổi thành we use the beanCounter variable, which was fred's idea(hạ thấp các chữ cái đã được viết hoa)? Điều này có vẻ không thỏa đáng.
Scott

Cảm ơn bạn, scott, tôi đã không hiểu đầy đủ ý tưởng, vì vậy tôi hy vọng bây giờ nó sẽ ổn.
Francisco M

Vâng cái đấy tốt hơn. Bạn có thể đơn giản hóa nó một chút: chỉ cần tìm «_ ([az])» (không có +). Thật không may, điều này bây giờ về cơ bản là tương đương với một số câu trả lời trước đó.
Scott

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.