Frage

Ich möchte einen beliebigen Text in einer Datei zu finden, die einen regulären Ausdruck des Formulars übereinstimmt t [A-Z] u (dh ein Spiel t gefolgt von einem Großbuchstaben und ein anderes Spiel u , und verwandelt den gefundenen Text, so dass der Großbuchstabe Klein ist z. B. für die regexp x[A-Z]y

xAy

wird

xay

und

xZy

wird

xzy

Emacs' query-replace Funktion erlaubt es zurück Verweise, aber AFAIK nicht die Transformation des angepassten Text. Gibt es eine eingebaute Funktion, die dies tut? Hat jemand eine kurze Elisp Funktion, die ich verwenden könnte?

UPDATE

@Marcel Levy hat es: \, in einem Ersatz Ausdruck führt einen (willkürlichen?) Elisp Ausdruck. Zum Beispiel die Lösung des oben ist

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
War es hilfreich?

Lösung

Es sieht aus wie Steve Yegge tatsächlich geschrieben bereits die Antwort auf diese ein paar Jahre zurück: "Shiny und Neu: Emacs 22." Blättern Sie nach unten zu „Ändern Fall in Ersatz Strings“ und Sie werden seinen Beispielcode mit der replace-regexp Funktion sehen.

Die allgemeine Antwort ist, dass Sie „\“ verwenden, um all Lisp-Ausdruck als Teil der Ersatzzeichenfolge zu nennen, wie in \,(capitalize \1). Lesen Hilfetext, es sieht aus wie es nur im interaktiven Modus ist, aber das scheint wie der Ort, wo dies wäre nötigsten.

Andere Tipps

Eine Alternative in diesem Fall zu QRR ist die Aufnahme eines Makros und Wiedergabe es. (Isearch-forward-regexp, wählen Sie den Charakter, downcase-Region.) Ich on the fly Makros einfacher finden, da Sie sofort Feedback erhalten, wenn Ihr regexp falsch ist.

Ich würde tun dies mit einem Makro als gut, aber nur, weil Code innerhalb einer Ersatz-String für einen regulären Ausdruck Ausführung ist mir sehr intuitiv. Wenn Sie ein Batch-Skript oder etwas schreiben, welcher sich sehr schnell gehen muss, \, ist sicherlich der Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top