Pregunta

Quiero encontrar cualquier texto en un archivo que coincida con una expresión regular del formulario t[A-Z]tu (es decir, una coincidencia t seguido de una letra mayúscula y otra coincidencia tu, y transforme el texto coincidente para que la letra mayúscula esté en minúscula.Por ejemplo, para la expresión regular x[A-Z]y

xAy

se convierte

xay

y

xZy

se convierte

xzy

Emacs query-replace La función permite referencias anteriores, pero AFAIK no la transformación del texto coincidente.¿Existe una función incorporada que haga esto?¿Alguien tiene una función corta de Elisp que pueda usar?

ACTUALIZAR

@Marcel Levy lo tiene: \, en una expresión de reemplazo introduce una expresión Elisp (¿arbitraria?).Por ejemplo, la solución a lo anterior es

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

Solución

Parece que Steve Yege De hecho, ya publiqué la respuesta a esto hace unos años: "Brillante y nuevo:Emacs 22." Desplácese hacia abajo hasta "Cambiar mayúsculas y minúsculas en cadenas de reemplazo" y verá su código de ejemplo usando el replace-regexp función.

La respuesta general es que se utiliza "\" para llamar a cualquier expresión ceceo como parte de la cadena de reemplazo, como en \,(capitalize \1).Al leer el texto de ayuda, parece que solo está en modo interactivo, pero ese parece ser el único lugar donde esto sería más necesario.

Otros consejos

Una alternativa a qrr en este caso es grabar una macro y reproducirla.(isearch-forward-regexp, seleccione el carácter, región en mayúsculas). Encuentro que las macros sobre la marcha son más fáciles, ya que obtiene comentarios inmediatos si su expresión regular es incorrecta.

También haría esto con una macro, pero solo porque ejecutar código desde una cadena de reemplazo para una expresión regular es muy poco intuitivo para mí.Si está escribiendo un script por lotes o algo que necesita ir muy rápido, \, es sin duda el camino a seguir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top