Domanda

Voglio trovare il testo in un file che corrisponde a una espressione della forma t[A-Z]u (cioè, una partita t seguita da una lettera maiuscola e un altro match u, e trasformare il testo corrispondente, in modo che la lettera maiuscola è in minuscolo.Per esempio, per l'espressione regolare x[A-Z]y

xAy

diventa

xay

e

xZy

diventa

xzy

Emacs' query-replace la funzione consente di back-riferimenti, ma, per quanto ne so non la trasformazione del testo corrispondente.C'è una funzione built-in che fa questo?Qualcuno ha una breve Elisp funzione potrei usare?

AGGIORNAMENTO

@Marcel Levy ha: \, in una espressione di sostituzione introduce un (arbitrario?) Elisp espressione.E. g., la soluzione di cui sopra è

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
È stato utile?

Soluzione

Sembra Steve Yegge in realtà già postato la risposta a questo un paio di anni fa: "Lucido e Nuovo:Emacs 22." Scorrere fino a "Modifica Caso in Stringhe di Sostituzione" e vedrai il codice di esempio utilizzando il replace-regexp funzione.

La risposta generale è che è possibile utilizzare"\", per chiamare qualsiasi lisp espressione come parte della stringa di sostituzione, come in \,(capitalize \1).La lettura di un testo di aiuto, sembra che solo in modalità interattiva, ma che sembra l'unico posto in cui sarebbe più necessario.

Altri suggerimenti

Un'alternativa al qrr in questo caso è la registrazione di una macro e la riproduzione.(isearch-avanti-regexp, selezionare il carattere, downcase-regione). Trovo al volo macro più facile, dal momento che si ottiene un feedback immediato se la tua regexp è sbagliato.

Mi piacerebbe farlo con una macro, ma solo perché l'esecuzione di codice all'interno di una stringa di sostituzione di un'espressione regolare è molto intuitivo per me.Se si sta scrivendo un batch script o qualcosa che ha bisogno di andare molto veloce, \, è sicuramente la strada da percorrere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top