Regex заменить заглавные буквы строчными

223

Я пытаюсь заменить заглавные буквы на соответствующие строчные буквы с помощью регулярных выражений. Так что

EarTH:   1,
MerCury: 0.2408467,
venuS:   0.61519726,

становится

earth:   1,
mercury: 0.2408467,
venus:   0.61519726,

в возвышенном тексте. Как я могу использовать строчные буквы только в словах, которые содержат как строчные, так и прописные буквы? Так что это влияет venUsи нет VENUS.

leemour
источник

Ответы:

395

Ты можешь:

Найти: (\w) заменить на:\L$1

Или выберите текст, ctrl+ K+ L.

Алекс К.
источник
7
супер. очень полезно. Не могли бы вы указать на какой-нибудь ресурс, который перечисляет такие преобразования, как '\ L'?
Codious-JR
17
Sublime использует Boost для поддержки RegEx, это документы для строк формата, например \ L: boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/…
Алекс К.
4
А в IntelliJ
Патрик,
12
Примечание: чтобы перейти в верхний регистр, вам понадобится\U
takanuva15
3
Чтобы использовать только один параметр в нижнем регистре, поставьте \ E после него, чтобы завершить раздел в нижнем регистре: $1\L$2\E$3
Michael
130

Я подумал, что это может пригодиться и другим:

найти:

  • ([A-Z])(.*)

заменить:

  • \L$1$2-> преобразует все буквы в $1и $2строчные
    НО
  • \l$1$2-> будет конвертировать только первую букву $1в нижний регистр и оставит все остальное как есть

То же самое касается заглавных букв \Uи\u

Dgo
источник
7
\l$1$2будет делать только целое $1в нижнем регистре в этом случае здесь, потому что $iсодержит только одну букву. \l=> первая следующая буква в нижнем регистре и \u=> первая следующая буква в верхнем регистре. Куда \Uи \Iделали это для всех следующих писем.
Райш
5
Обратите внимание, что \Eзаканчивается \Lили \Uпоследовательность.
Людовик Куты
77

Перед поиском с помощью регулярных выражений [A-Z], вы должны нажать чувствительную к регистру кнопку (или Alt+ C) (так как лемуру приятно отредактировать в принятом ответе). Просто чтобы прояснить, я оставляю несколько других примеров:

  1. Прописать слова
    • Найти: (\s)([a-z])( \sтакже соответствует новым строкам, т.е. "venuS" => "VenuS")
    • Заменить: $1\u$2
  2. Некапитализировать слова
    • Найти: (\s)([A-Z])
    • Заменить: $1\l$2
  3. Удалить случай верблюда (например, cAmelCAse => camelcAse => верблюд)
    • Найти: ([a-z])([A-Z])
    • Заменить: $1\l$2
  4. Строчные буквы внутри слов (например, LowerCASe => Строчные)
    • Найти: (\w)([A-Z]+)
    • Заменить: $1\L$2
    • Альтернативная замена: \L$0
  5. Прописные буквы в словах (например, upperCASe => uPPERCASE)
    • Найти: (\w)([A-Z]+)
    • Заменить: $1\U$2
  6. Верхний регистр предыдущего (например, upperCase => UPPERCase)
    • Найти: (\w+)([A-Z])
    • Заменить: \U$1$2
  7. Нижний регистр предыдущийНижний регистр (например, LOWERCase => lowerCase)
    • Найти: (\w+)([A-Z])
    • Заменить: \L$1$2
  8. Прописные остальные (например, upperCase => upperCASE)
    • Найти: ([A-Z])(\w+)
    • Заменить: $1\U$2
  9. Остальные строчные буквы (например, lOWERCASE => lOwercase)
    • Найти: ([A-Z])(\w+)
    • Заменить: $1\L$2
  10. Сдвиг вправо-верхний регистр (например, Case => cAse => caSe => casE)
    • Найти: ([a-z\s])([A-Z])(\w)
    • Заменить: $1\l$2\u$3
  11. Сдвиг влево-верхний регистр (например, CasE => CaSe => CAse => Case)
    • Найти: (\w)([A-Z])([a-z\s])
    • Заменить: \u$1\l$2$3

Что касается вопроса (сопоставьте слова, по крайней мере, с одной заглавной и одной строчной буквой и сделайте их строчными), комментарий-ответ leemour является правильным ответом . Просто чтобы уточнить, что если нужно заменить только одну группу, вы можете просто использовать ее ?:во внутренних группах (то есть, в группах без захвата ) или вообще не создавать их:

  • Найти: ((?:[a-z][A-Z]+)|(?:[A-Z]+[a-z])) ИЛИ([a-z][A-Z]+|[A-Z]+[a-z])
  • Заменить: \L$1

2016-06-23 Редактировать

Тайлер предложил, отредактировав этот ответ, найти альтернативное выражение для # 4:

  • (\B)([A-Z]+)

Согласно документации , \Bбудет искать символ, который не находится на границе слова (то есть не в начале и не в конце). Вы можете использовать кнопку « Заменить все» , и она делает то же самое, что (\w)([A-Z]+)и выражение для поиска.

Однако недостатком \Bявляется то, что он не допускает единичных замен, возможно, из-за ограничения find «not border» (пожалуйста, отредактируйте его, если знаете точную причину).

Armfoot
источник
2

Регулярное выражение

Найти :\w+

Заменить :\L$0

Sublime Text использует движок Perl-совместимых регулярных выражений (PCRE) из библиотеки Boost для включения регулярных выражений в панели поиска.

\L Преобразует все в нижний регистр

$0 Захват групп

BadTudou
источник
Пожалуйста, сделайте полный ответ, а не просто кодовый ответ без объяснения причин.
petezurich
1

В BBEdit работает это (например: изменение значений идентификаторов в нижний регистр):

Поиск любого значения: <a id="(?P<x>.*?)"></a> замените его тем же в нижнем регистре:<a id="\L\P<x>\E"></a>

Было: <a id="VALUE"></a> стало:<a id="value"></a>

Павел Бондаровский
источник
0

Попробуй это

  • Найти: ([A-Z])([A-Z]+)\b
  • Заменить: $1\L$2

Убедитесь, что чувствительность к регистру включена (Alt + C)

Виньеш Кумар А
источник
Это не работает Это соответствует 2+ заглавным буквам. Но я понимаю, что \Lэто строчные. Я обновил вопрос.
лемур