Використовуйте Notepad ++, щоб змінити under_score_case на CamelCase?


19

Я можу написати регулярний вираз у NP ++, щоб знайти under_score_case. Я можу використовувати TextFX в NP ++, щоб змінити регістр на верхній і нижній регістри, виділяючи і вибираючи.

Як я можу використовувати або NP ++ s Знайти / Замінити або знайти TextFX і замінити зшити їх разом і звернений under_score_caseдо camelCase?

Я хочу навчитися робити це в NP ++, а не використовувати скрипт.

Зразок введення:

this is_a_line
some more_data_over_here
whoop de_do_da

Бажаний вихід:

this isALine
some moreDataOverHere
whoop deDoDa

Зворотне вираження відповідатиме підкресленням _([a-z]). Заміна, яку, на мою думку, існує, але я не можу знайти, щось подібне _\toupper\1.

Відповіді:


6

У мене є рішення, яке тривалий і складний, але він працюватиме в Notepad ++. Він вимагає використання регулярного вираження, необов'язково звичайного пошуку та заміни, а також TextFX.

  1. Додайте символ заповнювача до передньої частини кожного слова, яку я вибрав Z. Це, мабуть, не повинно бути в алфавіті, але це простіше для останнього кроку. За допомогою регулярного вираження шукайте \<([^ ]*)\>та замінюйте Z\1.
  2. Замініть наявні пробіли унікальною послідовністю заповнення. Я вибрав # пробіл #. Це можна зробити за допомогою регулярного вираження, але я вважаю за краще використовувати звичайний або розширений.
  3. Замініть підкреслення пробілами. Якщо є якісь підкреслення, які не слід замінювати, то, ймовірно, потрібен спеціальний регулярний вираз. Я просто зробив прямий пошук і заміну.
  4. Виберіть увесь текст і в меню TextFX виберіть TextFX Characters -> Proper Case.
  5. Тепер нам потрібно змінити перші 3 кроки. Шукайте пробіли та замініть їх нічим. Потім знайдіть послідовність заповнювачів місця та замініть пробіл. Нарешті, використовуючи регулярні вирази, шукайте \<Z([^ ]*)\>та замінюйте \1.

Скручений, але це працює.
Freiheit

Невдачі Notepad ++ із регулярним виразом змусили мене раніше придумувати подібні рішення, зокрема, коли мені потрібно знайти та замінити через рядки або використовувати спеціальні символи, як-от вкладка.
MBraedley

Окрім того, чи ведучий проекту щодо NP ++ (містер Хо, як я пам’ятаю) не шумів щодо запровадження підтримки, що нагадує vim? Будь-які плагіни для підтримки цього? NP ++ і TextFX справді потужні, їм просто потрібно трохи більше зшити їх.
Freiheit

Я насправді не слідкую за проектом, але думаю, що він обмежений використанням Сцинтилли.
MBraedley

1
Одне застереження: Якщо другий і наступний символ у кожному слові є великими літерами, він робиться з малої літери, наприклад, ALL_CAPSстає allCaps.
Gnubie

15

Просте знаходження / заміна зробить це в NP ++:

Знайти: [_]{1,1}([a-z])

Замінити: \U$1

Для цього потрібно вибрати перемикач "Регулярний вираз" на панелі "Замінити".


5
Або просто _(.)як рядок пошуку.
Домінік Комтуа

Якщо ви хочете PascalCase (в один крок), ви можете використовувати Find: (?:^|_)([a-z]) Замінити: \U$1$2
Rubenisme

6

Зазвичай я використовую vim як редактор. Наступний регулярний вираз виконує те, що ви намагаєтеся зробити в vim:

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

З того, що я можу сказати ( я трохи обдурив NP ++ ), Notepad ++ не розуміє макрос \uвеликого регістру в Perl Regexp. Можливо, ви не зможете зробити це повністю за допомогою Notepad ++. Сподіваюсь, хтось докаже мене неправильно і зробить ваш день.


Так, я застряг у середовищі Windows. Копіювання даних на машину * nix або OS X працює, але навряд чи витончено. Я можу також тренувати інших товаришів по команді на NP ++.
Freiheit

Я думаю, що той самий вираз працює і в eMacs. Мої знання про eMac туманні. . .
surfasb

@Freiheit Є vim для Windows; хоча це не допоможе перекреслити інших товаришів по команді на NP ++
Matrix Mole

Це, здається, працює добре в останніх версіях Notepad ++ (я використовую 6.7.7).
levant pied

3

Ви можете зробити це одним кроком у блокноті ++, який, мабуть, корисніше:

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

Єдине питання з цим полягає в тому, що вам потрібно знати максимальний час, коли може бути присутнім підсумковий бал, і як закінчується рядок. У наведеному вище прикладі я замінюю імена файлів PHP на camelCase, знаючи, що бал не може бути більше 3 разів, менше - це не проблема.


2

Мій особистий фаворит - sed. Це блискавично:

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

makeMeCamelCasePlease

Ви можете використовувати опцію -i для заміни у файлі, який ви редагуєте, і N ++ має підняти зміни.

Це також видалить усі підкреслення, як і деякі рішення вище. Це можна виправити, якщо це проблема.


2
  • Перетворіть регістр змії. Я можу це зробити за допомогою Notepad ++, дотримуючись наведених нижче кроків.

  • Перетворіть вхідні регістри змій у всі малі регістри, якщо вони вже не малими літерами

  • Відкрийте форму Замінити ( Пошук-> Замінити АБО Ctrl + H )
  • Перевірте перемикач Regular Expression
  • Шукайте _([a-z])АБО_(.)
  • Замініть \u\1введенням

0

Я працюю з Notepad ++ 7.3. У мене була така ж проблема, і я зробив наступне:

  1. Ctrl+H (показати форму пошуку)
  2. Перевірте перемикач Regular Expression
  3. Шукайте «_ ([az] +)»
  4. Замінити на «\ u \ 1»

І працювали!


Отже, це змінило б усі літери на малі, а потім напишіть великими літерами літери, що слідують за підкресленнями, правда? Тож We use the bean_counter variable, which was Fred's ideaбуло б змінено на we use the beanCounter variable, which was fred's idea(нижнєзапис букв, які вже були написані з великої літери)? Це здається незадовільним.
Скотт

Дякую, Скотт, я не повністю зрозумів ідею, тож сподіваюся, зараз це буде добре.
Франсіско М

Так, це краще. Можливо, ви могли б трохи спростити це: просто шукайте «_ ([az])» (без значень +). На жаль, це зараз по суті еквівалентно декільком попередніх відповідей.
Скотт

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.