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 venUs
e não VENUS
.
regex
sublimetext3
sublimetext2
sublimetext
leemour
fonte
fonte
\U
$1\L$2\E$3
Imaginei que isso também seria útil para outras pessoas:
encontrar:
([A-Z])(.*)
substituir:
\L$1$2
-> irá converter todas as letras em$1
e$2
para minúsculasMAS
\l$1$2
-> converterá apenas a primeira letra de$1
para minúscula e deixará todo o resto como estáO mesmo vale para maiúsculas com
\U
e\u
fonte
\l$1$2
só faria o todo$1
em minúsculas nesse caso aqui, porque$i
contém apenas uma letra.\l
=> primeira letra seguinte para minúscula e\u
=> primeira letra seguinte para maiúscula. Onde\U
e\I
fazê-lo para todas as seguintes cartas.\E
termina uma\L
ou\U
sequência.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:(\s)([a-z])
(\s
também corresponde a novas linhas, ou seja, "venuS" => "VenuS")$1\u$2
(\s)([A-Z])
$1\l$2
([a-z])([A-Z])
$1\l$2
(\w)([A-Z]+)
$1\L$2
\L$0
(\w)([A-Z]+)
$1\U$2
(\w+)([A-Z])
\U$1$2
(\w+)([A-Z])
\L$1$2
([A-Z])(\w+)
$1\U$2
([A-Z])(\w+)
$1\L$2
([a-z\s])([A-Z])(\w)
$1\l$2\u$3
(\w)([A-Z])([a-z\s])
\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:((?:[a-z][A-Z]+)|(?:[A-Z]+[a-z]))
OR([a-z][A-Z]+|[A-Z]+[a-z])
\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 ,
\B
procurará 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).fonte
Expressão regular
Localizar :
\w+
Substitua :
\L$0
\L
Converte tudo em minúsculas$0
Grupos de capturafonte
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>
fonte
Tente isto
([A-Z])([A-Z]+)\b
$1\L$2
Verifique se a sensibilidade do caso está ativada (Alt + C)
fonte
\L
é minúsculo. Eu atualizei a pergunta.