Ersetzen Sie eine bestimmte Zeichenfolge schrittweise


12

Nehmen wir an, ich habe einen Text wie den folgenden:

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

Jetzt möchte ich das durch solche nnZahlen ersetzen

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

Ich habe M-x replace-regexp nn RET \# RETdas immer geschafft.

Fragen:

  1. Ich möchte die Ersatznummer starten, um von 1anstatt von zu beginnen 0. Oder besser gesagt von einer bestimmten Zahl ausgehen 25. Wie soll ich den obigen Befehl ändern?
  2. Wie zu ersetzen , nnmit Ziffern wie 001, 002.... 998, 999etc - ich mit führenden Nullen bedeuten

Dies ist nicht das, wonach Sie fragen, aber eine andere Möglichkeit, dies zu tun, besteht darin, ein Makro zusammen mit einem Register zu verwenden.
Caterpillar

Antworten:


12

Allgemeine Technik

Ihre Ersatzzeichenfolge kann beliebigen Lisp-Code enthalten. Aus der Dokumentation zu replace-regexp :

Bei interaktiven Aufrufen kann der Ersatztext '\' enthalten, gefolgt von einem Lisp-Ausdruck, der als Teil des Ersatztextes verwendet wird. Innerhalb dieses Ausdrucks ist '\ &' eine Zeichenfolge, die die gesamte Übereinstimmung bezeichnet, '\ N' eine Teilübereinstimmung, '# &' und '#N' die jeweiligen numerischen Werte von 'Zeichenfolge zu Zahl' und '# 'selbst für' Ersetzungszahl 'ist die Anzahl der Ersetzungen bisher aufgetreten, beginnend bei Null.

Wir können diese Technik auf verschiedene Arten anwenden.

Ab 1

Was wir tun möchten, ist, nndurch eines mehr zu ersetzen, als replace-countSie verwendet haben \#.

Rufen Sie #'replace-regexpmit dem Argument \,(1+ \#):

C-M-% nn \,(1+ \#)ersetzt nn mit 1zuerst, dann 2, 3usw.

Beginnt um 25

Sie können dies ändern, indem Sie nicht nur eine hinzufügen, sondern (in Ihrem Beispiel) 25:

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

Führende Nullen

Oder wir können formatführende Nullen hinzufügen. Dies wird ersetzt nnmit 000, 001, 002, etc. Sie andere Lisp - Code kombinieren können oben an beginnen 001, 025oder was auch immer Sie wollen.

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


5

Sie können auch verwenden cua-mode.

Wählen Sie die Rechteckregion (alle nn) und dann M-x cua-rectangle-mark-mode.

Weiter M-nund akzeptieren Sie die Standardwerte.


Ich wünschte, ich könnte dies auch als Antwort akzeptieren
Prasanna
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.