Regex zamień wielkie litery na małe litery

220

Próbuję zastąpić wielkie litery odpowiednimi małymi literami za pomocą wyrażenia regularnego. Po to aby

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

staje się

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

w Sublime Text. Jak mogę wstawiać małe litery tylko w słowach zawierających zarówno małe, jak i wielkie litery? Tak, że to wpływa, venUsa nie VENUS.

leemour
źródło

Odpowiedzi:

393

Możesz:

Znajdź: (\w) Zamień na:\L$1

Lub wybierz tekst, ctrl+ K+ L.

Alex K.
źródło
7
Wspaniały. bardzo przydatne. Czy możesz wskazać zasób zawierający listę transformacji, np. „\ L”?
Codious-JR
17
Sublime używa Boost do obsługi RegEx, są to dokumenty dla ciągów formatu, takich jak \ L: boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/…
Alex K.
4
A w IntelliJ
Patrick
11
Uwaga: aby przejść na wielkie litery, potrzebujesz\U
takanuva15,
2
Aby wstawić tylko mały parametr, umieść po nim \ E, aby zakończyć rozdział małymi literami: $1\L$2\E$3
Michael
129

Pomyślałem, że to może się przydać także innym:

odnaleźć:

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

zastąpić:

  • \L$1$2-> konwertuje wszystkie litery $1i $2na małe
    ALE
  • \l$1$2-> konwertuje tylko pierwszą literę $1na małe litery i pozostawia wszystko inne bez zmian

To samo dotyczy wielkich liter z \Ui\u

dGo
źródło
7
\l$1$2tylko by cała $1małymi literami w tej sprawie, ponieważ $izawiera tylko jeden list. \l=> pierwsza następna litera do małych liter i \u=> pierwsza następna litera do wielkich liter. Gdzie \Ui \Irobi to z następującymi literami.
Raisch
5
Zauważ, że \Ekończy sekwencję \Llub \U.
Ludovic Kuty,
77

Przed wyszukiwaniem za pomocą wyrażenia regularnego [A-Z]powinieneś nacisnąć przycisk z rozróżnianiem wielkości liter (lub Alt+ C) (jak leemour ładnie sugeruje do edycji w zaakceptowanej odpowiedzi). Dla jasności zostawiam kilka innych przykładów:

  1. Wielkie słowa
    • Znajdź: (\s)([a-z])( \sdopasowuje również nowe wiersze, tj. „VenuS” => „VenuS”)
    • Zastąpić: $1\u$2
  2. Nie dokapitalizuj słów
    • Odnaleźć: (\s)([A-Z])
    • Zastąpić: $1\l$2
  3. Usuń obudowę wielbłąda (np. CAmelCAse => camelcAse => camelcase)
    • Odnaleźć: ([a-z])([A-Z])
    • Zastąpić: $1\l$2
  4. Małe litery w słowach (np. SmallCASe => Małe litery)
    • Odnaleźć: (\w)([A-Z]+)
    • Zastąpić: $1\L$2
    • Alternatywna wymiana: \L$0
  5. Wielkie litery w słowach (np. Wielkie litery => uPPERCASE)
    • Odnaleźć: (\w)([A-Z]+)
    • Zastąpić: $1\U$2
  6. Wielkie poprzednie (np. UpperCase => UPPERCase)
    • Odnaleźć: (\w+)([A-Z])
    • Zastąpić: \U$1$2
  7. Poprzednie małe litery (np. LOWERCase => lowerCase)
    • Odnaleźć: (\w+)([A-Z])
    • Zastąpić: \L$1$2
  8. Wielkie litery reszty (np. UpperCase => upperCASE)
    • Odnaleźć: ([A-Z])(\w+)
    • Zastąpić: $1\U$2
  9. Resztę małych liter (np. LOWERCASE => lOwercase)
    • Odnaleźć: ([A-Z])(\w+)
    • Zastąpić: $1\L$2
  10. Shift-right-wielkie litery (np. Case => cAse => caSe => casE)
    • Odnaleźć: ([a-z\s])([A-Z])(\w)
    • Zastąpić: $1\l$2\u$3
  11. Shift-left-wielkie litery (np. CasE => CaSe => CAse => Case)
    • Odnaleźć: (\w)([A-Z])([a-z\s])
    • Zastąpić: \u$1\l$2$3

Jeśli chodzi o pytanie (dopasuj słowa z co najmniej jedną wielką i jedną małą literą i uczyń je małymi), odpowiedź komentująca leemour jest właściwą odpowiedzią . Aby wyjaśnić, jeśli istnieje tylko jedna grupa do zastąpienia, możesz po prostu użyć ?:w grupach wewnętrznych (tj. Grupach nie przechwytujących ) lub w ogóle uniknąć ich tworzenia:

  • Znajdź: ((?:[a-z][A-Z]+)|(?:[A-Z]+[a-z]))OR([a-z][A-Z]+|[A-Z]+[a-z])
  • Zastąpić: \L$1

2016-06-23 Edytuj

Tyler zasugerował, edytując tę ​​odpowiedź, alternatywne wyrażenie dla # 4:

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

Zgodnie z dokumentacją , \Bbędzie wyglądać na znak, że nie jest na granicy tego słowa (czyli nie na początku, a nie na końcu). Możesz użyć przycisku Zamień wszystko i robi dokładnie to samo, co w przypadku (\w)([A-Z]+)wyrażenia find.

Minusem \Bjest jednak to, że nie zezwala na pojedyncze zamiany, być może z powodu ograniczenia „nieograniczonego” znalezienia (proszę zrób to, jeśli znasz dokładny powód).

Stopy
źródło
2

Wyrażenie regularne

Znajdź :\w+

Zamień :\L$0

Sublime Text korzysta z silnika wyrażeń regularnych zgodnych z Perl (PCRE) z biblioteki Boost do zasilania wyrażeń regularnych w panelach wyszukiwania.

\L Konwertuje wszystko na małe litery

$0 Przechwytuj grupy

BadTudou
źródło
Uczyń to pełną odpowiedzią, a nie tylko odpowiedzią na kod bez wyjaśnienia.
petezurich,
1

W BBEdit działa to (np .: zmiana wartości identyfikatora na małe litery):

Wyszukaj dowolną wartość: <a id="(?P<x>.*?)"></a> Zamień na to samo małymi literami:<a id="\L\P<x>\E"></a>

Był: <a id="VALUE"></a> Został:<a id="value"></a>

Paul Bondarovski
źródło
0

Spróbuj tego

  • Odnaleźć: ([A-Z])([A-Z]+)\b
  • Zastąpić: $1\L$2

Upewnij się, że rozróżnianie wielkości liter jest włączone (Alt + C)

Vignesh Kumar A.
źródło
To nie działa. Pasuje do ponad 2 wielkich liter. Ale rozumiem, że \Lto małe litery. Zaktualizowałem pytanie.
leemour