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

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

Я пытаюсь заменить прописные буквы соответствующими строчными буквами с помощью regex. Так что

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

становится

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

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

4b9b3361

Ответ 1

Ты можешь:

Найти: (\w) Заменить с помощью: \L$1

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

Ответ 2

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

находить:

  • ([AZ])(.*)

заменить:

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

То же самое происходит и с прописными буквами с \U и \u

Ответ 3

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

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

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

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

2016-06-23 Изменить

Tyler, предлагаемый путем редактирования этого ответа альтернативным выражением поиска для # 4:

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

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

Однако недостатком \B является то, что он не допускает отдельных замен, возможно, из-за ограничения "не границ" (пожалуйста, отредактируйте это, если вы знаете точную причину).

Ответ 4

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

Найти: \w+

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

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

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

$0 Группы захвата

Ответ 5

Попробуйте это

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

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

Ответ 6

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

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

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