Regex substituir maiúsculas por letras minúsculas

220

Estou tentando substituir letras maiúsculas por letras minúsculas correspondentes usando regex. De modo a

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

torna-se

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

em texto sublime. Como posso letras minúsculas somente em palavras que contenham letras maiúsculas e minúsculas? Para que isso afete venUse não VENUS.

leemour
fonte

Respostas:

393

Você pode:

Localizar: (\w) Substituir por:\L$1

Ou selecione o texto, ctrl+ K+ L.

Alex K.
fonte
7
super. muito útil. Você poderia apontar para algum recurso que lista transformações como '\ L'?
Codious-JR 03/04
17
Usos sublimes impulso para o seu apoio RegEx, estes são os docs para as cordas do formato como \ L: boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/...
Alex K.
4
E no IntelliJ
Patrick
11
Nota: Para ir para maiúsculas, você vai precisar\U
takanuva15
2
Para minúsculas apenas um único parâmetro, coloque \ E depois de terminar a seção de minúsculas: $1\L$2\E$3
Michael
129

Imaginei que isso também seria útil para outras pessoas:

encontrar:

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

substituir:

  • \L$1$2-> irá converter todas as letras em $1e $2para minúsculas
    MAS
  • \l$1$2-> converterá apenas a primeira letra de $1para minúscula e deixará todo o resto como está

O mesmo vale para maiúsculas com \Ue\u

dGo
fonte
7
\l$1$2só faria o todo $1em minúsculas nesse caso aqui, porque $icontém apenas uma letra. \l=> primeira letra seguinte para minúscula e \u=> primeira letra seguinte para maiúscula. Onde \Ue \Ifazê-lo para todas as seguintes cartas.
Raisch
5
Observe que \Etermina uma \Lou \Usequência.
Ludovic Kuty 03/02/19
77

Antes de pesquisar com regex como [A-Z], você deve pressionar o botão com distinção entre maiúsculas e minúsculas (ou Alt+ C) (como leemour sugeriu que fosse editado na resposta aceita). Só para deixar claro, estou deixando alguns outros exemplos:

  1. Letras maiúsculas
    • Localizar: (\s)([a-z])( \stambém corresponde a novas linhas, ou seja, "venuS" => "VenuS")
    • Substituir: $1\u$2
  2. Descapitalizar palavras
    • Encontrar: (\s)([A-Z])
    • Substituir: $1\l$2
  3. Remova o estojo de camelo (por exemplo, cAmelCAse => camelcAse => camelcase)
    • Encontrar: ([a-z])([A-Z])
    • Substituir: $1\l$2
  4. Letras minúsculas nas palavras (por exemplo, LowerCASe => Lowercase)
    • Encontrar: (\w)([A-Z]+)
    • Substituir: $1\L$2
    • Substituição Alternativa: \L$0
  5. Letras maiúsculas nas palavras (por exemplo, upperCASe => uPPERCASE)
    • Encontrar: (\w)([A-Z]+)
    • Substituir: $1\U$2
  6. Maiúsculas anteriores (por exemplo, upperCase => UPPERCase)
    • Encontrar: (\w+)([A-Z])
    • Substituir: \U$1$2
  7. Letras minúsculas anteriores (por exemplo, LOWERCase => lowerCase)
    • Encontrar: (\w+)([A-Z])
    • Substituir: \L$1$2
  8. Coloque o restante em maiúsculas (por exemplo, upperCase => upperCASE)
    • Encontrar: ([A-Z])(\w+)
    • Substituir: $1\U$2
  9. Minúsculas o restante (por exemplo, lOWERCASE => lOwercase)
    • Encontrar: ([A-Z])(\w+)
    • Substituir: $1\L$2
  10. Shift-direito-maiúsculo (por exemplo, Case => cAse => caSe => case)
    • Encontrar: ([a-z\s])([A-Z])(\w)
    • Substituir: $1\l$2\u$3
  11. Shift-esquerda-maiúscula (por exemplo, CasE => CaSe => CAse => Case)
    • Encontrar: (\w)([A-Z])([a-z\s])
    • Substituir: \u$1\l$2$3

Em relação à pergunta (combine as palavras com pelo menos uma letra maiúscula e uma letra minúscula e faça-as em minúsculas), a resposta ao comentário de leemour é a resposta certa . Apenas para esclarecer, se houver apenas um grupo para substituir, você pode apenas usar ?:nos grupos internos (ou seja, grupos sem captura ) ou evitar criá-los:

  • Localizar: ((?:[a-z][A-Z]+)|(?:[A-Z]+[a-z]))OR([a-z][A-Z]+|[A-Z]+[a-z])
  • Substituir: \L$1

23/06/2016 Editar

Tyler sugeriu, editando esta resposta, uma expressão alternativa para o item 4:

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

De acordo com a documentação , \Bprocurará um caractere que não esteja no limite da palavra (ou seja, não no começo e nem no fim). Você pode usar o botão Substituir tudo e faz exatamente a mesma coisa que se tivesse (\w)([A-Z]+)como expressão de localização.

No entanto, a desvantagem \Bé que ela não permite substituições únicas, talvez devido à restrição de "não limite" da descoberta (edite-a se você souber o motivo exato).

Armfoot
fonte
2

Expressão regular

Localizar :\w+

Substitua :\L$0

O texto sublime usa o mecanismo PCRE (Perl Compatible Regular Expressions) da biblioteca Boost para ativar expressões regulares nos painéis de pesquisa.

\L Converte tudo em minúsculas

$0 Grupos de captura

BadTudou
fonte
Faça desta uma resposta completa, não apenas uma resposta de código sem explicação.
petezurich
1

No BBEdit funciona isso (por exemplo: alterando os valores de ID para minúsculas):

Pesquise qualquer valor: <a id="(?P<x>.*?)"></a> substitua pelo mesmo em minúsculas:<a id="\L\P<x>\E"></a>

Foi: <a id="VALUE"></a> Tornou-se:<a id="value"></a>

Paul Bondarovski
fonte
0

Tente isto

  • Encontrar: ([A-Z])([A-Z]+)\b
  • Substituir: $1\L$2

Verifique se a sensibilidade do caso está ativada (Alt + C)

Vignesh Kumar A
fonte
Isso não funciona. Corresponde a 2 ou mais letras maiúsculas. Mas eu entendo que isso \Lé minúsculo. Eu atualizei a pergunta.
Leemour