Как заменить верхний регистр нижним регистром с помощью regex?

Я должен заменить прописную букву в имени переменной со строчной буквой и добавить пространство

Например:

NotImplementedException должен быть Not implemented exception UnhandledException должен быть Unhandled exception

22
задан gturri 7 December 2016 в 16:39
поделиться

3 ответа

Поскольку вы не указали язык, я приведу пример на C #. Я уверен, что на вашем языке есть что-то подобное.

String s = "NotImplementedException";
s = Regex.Replace(s, @"\B[A-Z]", m => " " + m.ToString().ToLower());
// s = "Not implemented exception"
39
ответ дан 29 November 2019 в 05:06
поделиться

@Ignacio, позволю себе не согласиться. Конечно, это не то, что можно сделать в одном выражении с помощью обычных регулярных выражений. Но команда sed:

sed -e 's/\([a-zA-Z]\)C/\1 c/g' infile.txt

заменит все вхождения 'C' на ' c', если 'C' непосредственно предшествует буква. Все, что нужно сделать OP, это сделать 26 вариантов этого, что может быть утомительно. И получить условие, при котором регистр изменяется, тоже может быть сложно, но так всегда бывает при использовании регулярных выражений для глобального поиска и замены.

-5
ответ дан 29 November 2019 в 05:06
поделиться

Это можно сделать в sed с помощью одной команды:

$ echo "NotImplementedException" | sed 's/\B[A-Z]/ \l&/g'
Not implemented exception

Но поддержка \ l \ u , \ L , \ U и \ E ) редко встречаются среди реализаций Regex. на разных языках. Я только уверен, что в Perl это реализовано.

0
ответ дан 29 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: