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 .

7 ответов7

13

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

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

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

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

6

У меня есть длинное и запутанное решение, но оно будет работать в Notepad++. Это требует использования регулярных выражений, опционально обычного поиска и замены, а также TextFX.

  1. Добавьте символ-заполнитель в начале каждого слова, я выбрал Z Вероятно, это не обязательно должно быть буквально, но на последнем этапе это проще. Используя регулярное выражение, найдите \<([^ ]*)\> и замените на Z\1 .
  2. Замените существующие пробелы уникальной последовательностью заполнителей. Я выбрал # пробел #. Это можно сделать с помощью регулярных выражений, но я предпочитаю использовать обычный или расширенный.
  3. Заменить подчеркивания пробелами. Если есть какие-либо символы подчеркивания, которые не следует заменять, то, возможно, потребуется пользовательское регулярное выражение. Я просто сделал прямой поиск и замену.
  4. Выделите весь текст и в меню TextFX Characters -> Proper Case выберите « Символы TextFX -> Собственный регистр» .
  5. Теперь нам нужно поменять первые 3 шага. Ищите пробелы и заменяйте их ничем. Затем найдите вашу последовательность местозаполнителя и замените ее пробелом. Наконец, используя регулярное выражение, найдите \<Z([^ ]*)\> и замените на \1 .
5

Я обычно использую vim в качестве редактора. Следующее регулярное выражение выполняет то, что вы пытаетесь сделать в vim:

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

Из того, что я могу сказать (я дурачился с NP++ для немного), Notepad++ не понимает прописной \u макросъемки U в Perl Regexp. Возможно, вы не сможете сделать это полностью с помощью Notepad++. Надеюсь, кто-то докажет, что я неправ, и сделает ваш день.

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++ должен принять изменение.

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

0

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

  1. Ctrl+H (показать форму поиска)
  2. Переключатель «Регулярное выражение»
  3. Ищите «_ ([az]+)»
  4. Заменить на «\u\1»

И работал!

-1

Я столкнулся с этой проблемой и нашел отличное решение

  1. Заменить все подчеркивания ("_") пробелами ("")

  2. Измените первую букву каждого слова на заглавную

  3. Заменить все пробелы ("") пустым пробелом ("")

  4. Готово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .