Discussion:
[Emacs] Regex gesucht
(zu alt für eine Antwort)
Marcus Frings
2011-07-03 18:33:51 UTC
Permalink
Aloha,

ich muss in meinem LaTeX-Dokument einigen Text ersetzen, und zwar soll
aus der alten Definition

\altedef{TextA}{TextB}

die neue

\neuedef{TextA.TextB}

werden, d. h. dass also zusätzlich zum Text vorne noch "}{" durch "."
zwischen TextA und TextB ersetzt werden soll. Dabei sind TextA und TextB
immer variabel in der Länge und im Inhalt.

Folgendes sollte also für die Suche matchen: \\altedef\{.*\}\{.*\}
Ich dachte, ich könnte mit Ctrl+Alt+% und den folgenden Ausdrücken

\\altedef\{.*\}\{.*\}
\\neuedef\{.*\..*\}

das Ersetzen ausführen, aber das scheiterte aufgrund meiner mangelnden
RegExp-Kenntnissen.
Alternativ bin ich auch mit Perl-, Shellskript-Lösungen usw. zufrieden,
falls das im Emacs nicht gehen sollte. :-)

Wäre jemand mit besseren Regex-Kenntnisen bereit mir zu helfen? ;-)

Gruß,
Marcus
Malte Spiess
2011-07-03 18:52:48 UTC
Permalink
Hallo Marcus,
Post by Marcus Frings
Aloha,
ich muss in meinem LaTeX-Dokument einigen Text ersetzen, und zwar soll
aus der alten Definition
\altedef{TextA}{TextB}
die neue
\neuedef{TextA.TextB}
werden, d. h. dass also zusätzlich zum Text vorne noch "}{" durch "."
zwischen TextA und TextB ersetzt werden soll. Dabei sind TextA und TextB
immer variabel in der Länge und im Inhalt.
Folgendes sollte also für die Suche matchen: \\altedef\{.*\}\{.*\}
Ich dachte, ich könnte mit Ctrl+Alt+% und den folgenden Ausdrücken
\\altedef\{.*\}\{.*\}
\\neuedef\{.*\..*\}
mein Vorschlag:
\\altedef{\(.*\)}{\(.*\)}
\\neuedef{\1.\2}

Aber Achtung, das fliegt Dir schnell um die Ohren, wenn der zu
ersetzende Text auch }{ enthält!
Post by Marcus Frings
Gruß,
Marcus
Viele Grüße
Malte
Marcus Frings
2011-07-04 07:16:31 UTC
Permalink
Post by Malte Spiess
\\altedef{\(.*\)}{\(.*\)}
\\neuedef{\1.\2}
Danke für die schnelle Antwort. So hat's geklappt.
Post by Malte Spiess
Aber Achtung, das fliegt Dir schnell um die Ohren, wenn der zu
ersetzende Text auch }{ enthält!
Danke für die Warnung, aber das Problem tritt bei mir nicht auf, es sind
nur unterschiedlich lange Wörter.

Vielen Dank auch an Tim für die Erklärung!

Gruß,
Marcus

Tim Landscheidt
2011-07-03 18:56:55 UTC
Permalink
Post by Marcus Frings
ich muss in meinem LaTeX-Dokument einigen Text ersetzen, und zwar soll
aus der alten Definition
\altedef{TextA}{TextB}
die neue
\neuedef{TextA.TextB}
werden, d. h. dass also zusätzlich zum Text vorne noch "}{" durch "."
zwischen TextA und TextB ersetzt werden soll. Dabei sind TextA und TextB
immer variabel in der Länge und im Inhalt.
Folgendes sollte also für die Suche matchen: \\altedef\{.*\}\{.*\}
Ich dachte, ich könnte mit Ctrl+Alt+% und den folgenden Ausdrücken
\\altedef\{.*\}\{.*\}
\\neuedef\{.*\..*\}
das Ersetzen ausführen, aber das scheiterte aufgrund meiner mangelnden
RegExp-Kenntnissen.
Alternativ bin ich auch mit Perl-, Shellskript-Lösungen usw. zufrieden,
falls das im Emacs nicht gehen sollte. :-)
Wäre jemand mit besseren Regex-Kenntnisen bereit mir zu helfen? ;-)
In Emacs sind "{}" nur mit Backslash magisch, Gruppierungen
müssen mit "\(" und "\)" erfolgen und auf sie wird mit "\1"
& Co. verwiesen. Sprich und ungetestet: M-%
\\altedef{\(.*?\)}{\(.*?\)} RET \\neuedef{\1.\2} RET

Tim
Loading...