Преобразование символа в верхний регистр с использованием регулярных выражений (EditPad Pro)

159

Я написал регулярное выражение в надежде, что смогу заменить каждое совпадение (то есть всего один символ) на верхний регистр. Я использую EditPad Pro (однако я готов использовать любой другой инструмент, который позволил бы мне сделать это, если это можно попробовать бесплатно, поскольку мне нужно сделать это только один раз).

Предыстория: у меня очень длинный текстовый файл, используемый приложением, чувствительным к регистру, и некоторые слова начинаются со строчных, а не заглавных букв, что приводит к сбою приложения. Это заняло бы очень много времени вручную, и было бы довольно сложно обойтись без регулярных выражений, потому что появление (злых) символов нижнего регистра очень специфично.

Я написал регулярное выражение select и теперь могу использовать его с обратной ссылкой ($ 1 работает отлично), однако я не могу заменить его на верхний регистр char. Я думал, что-то вроде \ u $ 1 будет работать, но это не так в EditPad Pro.

Если ни один бесплатный инструмент не позволяет мне сделать это, я полагаю, что альтернативой было бы просто сделать это в C #, однако я немного тороплюсь и не нахожусь рядом с компилятором, поэтому мне сначала нужно скачать экспресс-версию, поэтому ... Было бы предпочтительнее найти инструмент, который поддерживает такую ​​функцию!

Спасибо!

Давид Божьяк
источник
3
Этот вопрос больше подходит Superuser?
Георгиевская

Ответы:

273

TextPad позволит вам выполнить эту операцию.

пример:

test this sentence

Найти что: \([^ ]*\) \(.*\) Заменить на:\U\1\E \2

это \Uприведет к тому, что все последующие символы будут верхними

\Eвыключит\U

результат будет:

TEST this sentence
АКФ
источник
13
Есть ли способ выполнить эту операцию в .NET Regex (без использования ToUpper)?
Шимми Вайцхандлер
34
Работает и в блокноте ++.
Шон
33
\U$1\Eв возвышенном тексте
Qwerty
10
\U\1\Eв Vim
J. Katzwinkel
6
Работает в PHPStorm тоже. У меня было противоположное требование, хотя. Мне пришлось заменить все значения атрибутов в верхнем регистре (от HTML 90-х) на строчные. Использование \L$1\Eсработало.
Ejaz
30

Я знаю, что эта тема о EditPad Pro, но я пришел сюда, потому что у меня была такая же потребность с регулярным выражением JavaScript.

Для людей, которым здесь нужен тот же совет, вы можете использовать функцию или лямбду в качестве аргумента замены.

Я использую функцию ниже для преобразования имен css -в эквивалент javascript, например, "border-top"будет преобразован в "borderTop":

    s = s.replace(/\-[a-z]/g, x => x[1].toUpperCase());
Серхио Абреу
источник
26

EditPad Pro и PowerGREP имеют уникальную функцию, которая позволяет изменить регистр обратной ссылки. \U1вставляет первую обратную ссылку в верхнем регистре, \L1в нижнем регистре и \F1с первым символом в верхнем регистре, а оставшуюся часть в нижнем регистре. Наконец, \I1вставьте его с первой буквы каждого слова в верхнем регистре, а другие буквы в нижнем регистре.

Источник: Goyvaerts, Jan (2006). Регулярные выражения: полный учебник . Lulu.com. п. 35 . ISBN 1411677609. Google Книги. Получено 25 июня 2010 г.

quantomcat
источник
6

Вы можете сделать это в jEdit, используя опцию «Возвращаемое значение фрагмента BeanShell» в диалоговом окне поиска и замены jEdit. Просто найдите " [a-z]"и замените его " _0.toUpperCase()"(без кавычек)

Себастьян К.
источник
1
Ваш ответ на самом деле не связан с первоначальным вопросом, но я нашел его во время поиска в Google и был именно тем, что я искал. Круто, спасибо!
adietisheim
5

Вы также можете использовать заглавные буквы первой буквы совпадения, используя \I1и \I2т. Д. Вместо $1и $2.

Echilon
источник
1

Еще один пример использования Notepad ++ (режим поиска по регулярным выражениям)

Find: (g|c|u|d)(et|reate|pdate|elete)_(.)([^\s (]+)
Replace: \U\1\E$2\U\3\E$4

Пример:

get_user -> GetUser
create_user -> CreateUser
update_user -> UpdateUser
delete_user -> DeleteUser
user2809176
источник