Sostituire in modo incrementale una determinata stringa


12

Diciamo che ho un testo così sotto:

AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)

Ora voglio sostituire il nncon i numeri in questo modo

AC (0)
AC (1)
AC (2)
AC (3)
AC (4)
AC (5)
AC (6)
AC (7)
AC (8)
AC (9)
AC (10)

Ci riuscivo M-x replace-regexp nn RET \# RET.

Domande:

  1. Voglio iniziare il numero di sostituzione da cui iniziare 1anziché da 0. O meglio iniziare da un numero specificato dire 25. Come devo modificare il comando sopra?
  2. Come sostituire nncon cifre come 001, 002.... 998, 999ecc. - Intendo con zeri iniziali

Questo non è ciò che stai chiedendo, ma un altro modo per farlo è utilizzare una macro insieme a un registro.
Caterpillar

Risposte:


12

Tecnica generale

La stringa di sostituzione può contenere codice lisp arbitrario. Dalla documentazione per sostituire-regexp :

Nelle chiamate interattive, il testo sostitutivo può contenere "\", seguito da un'espressione Lisp utilizzata come parte del testo sostitutivo. All'interno di quell'espressione, '\ &' è una stringa che indica l'intera corrispondenza, '\ N' una corrispondenza parziale, '# &' e '#N' i rispettivi valori numerici da 'stringa-a-numero' e '# 'stesso per' sostituisci-conta ', il numero di sostituzioni si è verificato finora, a partire da zero.

Possiamo usare questa tecnica in vari modi.

Partendo da 1

Wat che vogliamo fare è sostituirlo nncon uno in più di quello che replace-counthai usato \#.

Chiama #'replace-regexpcon l'argomento \,(1+ \#):

C-M-% nn \,(1+ \#)sostituirà nn con 1prima, poi 2, 3ecc

A partire da 25

Puoi modificarlo non solo aggiungendo uno, ma (nel tuo esempio) 25:

C-M-% nn \,(+ 25 \#)

Zeri iniziali

Oppure possiamo usare formatper aggiungere zeri iniziali. Questo sostituirà nncon 000, 001, 002, ecc È possibile combinare altri codice Lisp qui sopra per iniziare a 001, 025, o quello che volete.

C-M-% nn \,(format "$03d" \#)


5

Puoi anche usare cua-mode.

Seleziona la regione del rettangolo (tutte le nn) e quindi M-x cua-rectangle-mark-mode.

Quindi, M-naccetta i valori predefiniti.


Vorrei poter accettare anche questa come risposta
Prasanna,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.