Pregunta:
Digamos que tengo un texto como el siguiente:
AC(nn) AC(nn) AC(nn) AC(nn) AC(nn) AC(nn) AC(nn) AC(nn) AC(nn) AC(nn) AC(nn)
Ahora quiero reemplazar el nn
con números como ese
AC(0) AC(1) AC(2) AC(3) AC(4) AC(5) AC(6) AC(7) AC(8) AC(9) AC(10)
Mx replace-regexp nn RET \# RET
para lograr esto.
Preguntas:
- Quiero comenzar el número de reemplazo para comenzar desde
1
lugar de0
. O más bien, comience desde un número específico, digamos25
. ¿Cómo debo modificar el comando anterior? - Cómo reemplazar
nn
con dígitos como001
,002
…998
,999
, etc., quiero decir con ceros a la izquierda
Respuesta:
Técnica general
Su cadena de reemplazo puede contener código lisp arbitrario. De la documentación de replace-regexp :
En llamadas interactivas, el texto de reemplazo puede contener '\' seguido de una expresión Lisp utilizada como parte del texto de reemplazo. Dentro de esa expresión, '\ &' es una cadena que indica la coincidencia completa, '\ N' una coincidencia parcial, '# &' y '#N' los valores numéricos respectivos de 'cadena a número' y '# 'sí mismo para' reemplazar-contar ', el número de reemplazos ocurridos hasta ahora, comenzando desde cero.
Podemos utilizar esta técnica de varias formas.
A partir de 1
Lo que queremos hacer es reemplazar nn
con uno más que el replace-count
que usó con \#
.
Llame a #'replace-regexp
con el argumento \,(1+ \#)
:
CM-% nn \,(1+ \#)
reemplazará nn con 1
primero, luego 2
, 3
, etc.
A partir de los 25
Puede modificar esto no solo agregando uno, sino (en su ejemplo) 25:
CM-% nn \,(+ 25 \#)
Ceros a la izquierda
O podemos usar format
para agregar ceros a la izquierda. Esto reemplazará nn
con 000
, 001
, 002
, etc. Puede combinar otro código lisp anterior para comenzar en 001
, 025
o lo que desee.
CM-% nn \,(format "$03d" \#)