Используйте Notepad ++, чтобы изменить under_score_case на CamelCase?


19

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

Как я могу использовать либо поиск / замену NP ++, либо поиск и замену 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 ++ с регулярным выражением заставили меня придумать подобные решения раньше, особенно когда мне нужно найти и заменить между строк или использовать специальные символы, такие как tab.
MBraedley

Кроме того, руководитель проекта по NP ++ (насколько я помню, г-н Хо) слышал какие-либо шумы о введении поддержки замены типа vim? Какие-нибудь плагины для поддержки этого? NP ++ и TextFX действительно мощные, им просто нужно немного больше, чтобы соединить их вместе.
Freiheit

Я на самом деле не слежу за проектом, но я думаю, что он ограничен использованием Scintilla.
MBraedley

1
Одно предостережение: если второй и последующий символ в каждом слове является заглавной буквой, он становится строчным, например ALL_CAPSстановится allCaps.
Гнуби

15

Простой поиск / замена сделает это в NP ++:

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

Заменить: \U$1

Вам нужно выбрать переключатель «Регулярное выражение» на панели «Заменить», чтобы это работало.


5
Или просто _(.)как строка поиска.
Доминик Комтуа

Если вы хотите PascalCase (за один шаг), вы можете использовать Find: (?:^|_)([a-z]) Replace: \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 Есть окно для Windows; хотя это не поможет с перекрёстным обучением других товарищей по команде к NP ++
Matrix Mole

Это на самом деле, кажется, работает нормально в последних версиях Notepad ++ (я использую 6.7.7).
Левант разогнал

3

Вы можете сделать это одним шагом в notepad ++, что, вероятно, более полезно:

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

Мой личный фаворит - сед. Молниеносно:

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

makeMeCamelCasePlease

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

Это также удалит все подчеркивания, как и в некоторых вышеупомянутых решениях. Это можно исправить, если это проблема.


2
  • Преобразовать случай змеи Я мог бы сделать это с помощью Notepad ++, выполнив следующие шаги.

  • Преобразуйте входные данные в регистр змеи во все строчные буквы, если уже не в строчные

  • Откройте форму Заменить ( Поиск-> Заменить ИЛИ Ctrl + H )
  • Переключатель «Регулярное выражение»
  • Ищите _([a-z])ИЛИ_(.)
  • Заменить на \u\1вход

0

Я работаю с Notepad ++ 7.3. У меня была такая же проблема, и я сделал следующее:

  1. Ctrl+ H(показать форму поиска)
  2. Переключатель «Регулярное выражение»
  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.