Pergunta

Quero encontrar qualquer texto em um arquivo que corresponda a uma expressão regular do formato t[A-Z]você (ou seja, uma correspondência t seguido por uma letra maiúscula e outra correspondência você, e transforme o texto correspondente para que a letra maiúscula fique minúscula.Por exemplo, para a expressão regular x[A-Z]y

xAy

torna-se

xay

e

xZy

torna-se

xzy

Emacs' query-replace A função permite referências anteriores, mas AFAIK não a transformação do texto correspondente.Existe uma função interna que faz isso?Alguém tem uma função Elisp curta que eu possa usar?

ATUALIZAR

@Marcel Levy tem: \, em uma expressão de substituição introduz uma expressão Elisp (arbitrária?).Por exemplo, a solução para o acima é

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
Foi útil?

Solução

Parece Steve Yegge na verdade, já postei a resposta para isso há alguns anos: "Brilhante e novo:Emacs 22." Role para baixo até "Alterando maiúsculas e minúsculas em strings de substituição" e você verá o código de exemplo dele usando o replace-regexp função.

A resposta geral é que você usa "\," para chamar qualquer expressão lisp como parte da string de substituição, como em \,(capitalize \1).Lendo o texto de ajuda, parece que está apenas no modo interativo, mas esse parece ser o local onde isso seria mais necessário.

Outras dicas

Uma alternativa ao qrr neste caso é gravar uma macro e reproduzi-la.(isearch-forward-regexp, selecione o caractere, downcase-region.) Acho as macros dinâmicas mais fáceis, pois você obtém feedback imediato se seu regexp estiver errado.

Eu também faria isso com uma macro, mas apenas porque executar código a partir de uma string de substituição para uma expressão regular não é muito intuitivo para mim.Se você estiver escrevendo um script em lote ou algo que precisa ser executado muito rápido, \, certamente é o caminho a seguir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top