Regex замініть малі літери


220

Я намагаюся замінити великі літери на відповідні малі літери, використовуючи регулярний вираз. Так що

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

стає

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

у піднесеному тексті. Як я можу зменшити літери лише словами, які містять як малі, так і великі літери? Так що це впливає, venUsа не VENUS.

Відповіді:


393

Ви можете:

Знайдіть: (\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
Патрік

11
Примітка: Щоб перейти до верхнього регістру, вам знадобиться\U
takanuva15

2
Для того, щоб мати лише один параметр, $1\L$2\E$3
Майкл

129

Я вважав, що це може стати в нагоді і для інших:

знайти:

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

замінити:

  • \L$1$2-> перетворить усі літери в $1і $2в малі,
    АЛЕ
  • \l$1$2-> перетворить лише першу букву $1в малі і залишить все інше як є

Те саме стосується великих літер з \Uта\u


7
\l$1$2$1У цьому випадку буде зроблено лише ціле в нижньому регістрі, оскільки $iмістить лише одну букву. \l=> перший наступний лист у малому регістрі та \u=> перший наступний лист у великому регістрі. Де \Uі \Iробити це для всіх наступних листів.
Raisch

5
Зауважте, що \Eзакінчується a \Lабо \Uпослідовність.
Куті

77

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

  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. Малі літери всередині слів (наприклад, нижня літера => Малі )
    • Знайти: (\w)([A-Z]+)
    • Замінити: $1\L$2
    • Чергова заміна: \L$0
  5. Великі літери всередині слів (наприклад, upperCASe => uPPERCASE)
    • Знайти: (\w)([A-Z]+)
    • Замінити: $1\U$2
  6. Великий регістр попереднього верхній (наприклад, вищеCase => 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. Shift-лівий верхній регістр (наприклад, 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є те, що він не дозволяє одноразово замінити, можливо, через обмеження знаходження "не межа" (будь ласка, відредагуйте це, якщо знаєте точну причину).


2

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

Знайти :\w+

Замінити :\L$0

Sublime Text використовує механізм сумісних регулярних виразів Perl (PCRE) з бібліотеки Boost для введення регулярних виразів на панелях пошуку.

\L Перетворює все в малі регістри

$0 Захоплення груп


Будь ласка, зробіть це повною відповіддю, а не просто кодовою відповіддю без пояснень.
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це стосується малої літери. Я оновив питання.
leemour
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.