Problem mit regulaerem Ausdruck
Hallo, ich schlage mich mal wieder mit regulären Ausdrücken herum. Konkret geht es darum, in Texten falsche Anführungszeichen zu finden. Ich darf immer wieder Manuskripte korrigieren, in denen Zitate innerhalb von Zitaten mit den gleichen, doppelten Anführungszeichen versehen sind, so wie in diesem Beispielsatz: „Nichts“, sagte Kurt, „es bedeutet überhaupt nichts, außer „Kilroy was here“.“ Am liebsten wäre es mir, diese Fehler gleich im vim finden zu können, aber sed, grep und Co wären mir auch recht. Ein automatisches Ersetzen wäre übrigens nicht nötig, weil dann auch noch Fehler wie zwei öffnende, aber nur ein schließendes Anführungszeichen abgefangen werden müssten. Ein Suchmuster wie „.*[^“].*„ tut es natürlich nicht, weil die Einschränkung in der eckigen Klammer natürlich durch das vorangehende und nachfolgende .* aufgehoben wird. Beste Grüße Heinz -- Buchsatz für Autoren. Vom Manuskript zum Buch www.pahlke-online.de Bücher abseits des Mainstreams www.buchentdeckungen.de Barrierefreies Webdesign www.Pahlke-KunstWebDesign.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Heinz W. Pahlke, Mittwoch 25 April 2012:
Ein Suchmuster wie „.*[^“].*„ tut es natürlich nicht, weil die Einschränkung in der eckigen Klammer natürlich durch das vorangehende und nachfolgende .* aufgehoben wird.
Wie wärs damit: „[^“]*„ Viele Grüße! -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Wed, April 25, 2012 10:04, Andre Tann wrote:
Heinz W. Pahlke, Mittwoch 25 April 2012:
Ein Suchmuster wie .*[^].* tut es natürlich nicht, weil die Einschränkung in der eckigen Klammer natürlich durch das vorangehende und nachfolgende .* aufgehoben wird.
Wie wärs damit:
[^]*
Oder besser (in Vim RE): \(\_[^]*\)\|\(\_[^]*\) (kann auch über Zeilenumbrüche hinweg suchen) oder Basic RE, also z.B. grep/sed/awk (mit der Einschränkung, dass das Muster innerhalb einer Zeile enthalten sein muß): \([^]*\)\|\([^]*\) Grüße, Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Wed, 25 Apr 2012, Andre Tann schrieb
Wie wärs damit:
„[^“]*„
Genial :-)) Bloß, kannst du mir auch noch verraten, warum das funktioniert? Ich bin davon ausgegangen, dass die beiden „„ nicht hintereinander stehen, also ein .* für alle beliebigen Zeichen eingefügt werden müsste. Ach nein, ich glaube, ich ahne es. Das [^“] steht anstelle des Punktes. Vielen Dank Heinz -- Buchsatz für Autoren. Vom Manuskript zum Buch www.pahlke-online.de Bücher abseits des Mainstreams www.buchentdeckungen.de Barrierefreies Webdesign www.Pahlke-KunstWebDesign.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Heinz W. Pahlke, Mittwoch 25 April 2012:
„[^“]*„
Genial :-))
Bloß, kannst du mir auch noch verraten, warum das funktioniert?
[^“] steht für alles außer “, mit Stern hintendran wird draus "beliebig viele nicht-“". Ausgesprochen heißt das dann: Suche ein „, danach alles, nur kein “, danach wieder ein „. Was Christian nebenan geschrieben hat, ist dann die Erweiterung, indem sie zwei Varianten einführt. Keine Ahnung, ob das in Deinem Fall nötig/sinnvoll ist. Vermutlich ist es aber sinnvoll, denn zwei “ ohne ein „ dazwischen sind ja auch blöd. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (3)
-
Andre Tann
-
Christian Brabandt
-
Heinz W. Pahlke