Подтвердить что ты не робот

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

Мне нужно заменить букву верхнего регистра на имя переменной строчной буквой и добавить пробел

Например:

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

4b9b3361

Ответ 1

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

String s = "NotImplementedException";
s = Regex.Replace(s, @"\B[A-Z]", m => " " + m.ToString().ToLower());
// s = "Not implemented exception"

Ответ 2

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

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

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

Ответ 3

@Игнасио, я прошу разницы. Конечно, это не то, что можно сделать в одном утверждении с обычными регулярными выражениями. Но команда sed:

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

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