regular-expressions – Reemplazar incrementalmente una cadena dada

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:

  1. Quiero comenzar el número de reemplazo para comenzar desde 1 lugar de 0 . O más bien, comience desde un número específico, digamos 25 . ¿Cómo debo modificar el comando anterior?
  2. Cómo reemplazar nn con dígitos como 001 , 002998 , 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" \#)

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım