4 Stimmen

Regex ersetzen, aber nur zwischen zwei Mustern

Ok, ich habe eine mehrzeilige Zeichenfolge, die ich versuche, etwas zu bereinigen.

Jede Zeile kann, muss aber nicht Teil eines großen Blocks von zitiertem Text sein. Beispiel:

This line is not quoted.
This part of the line is not quoted “but this is.”
This one is not quoted either.
“This entire line is quoted”
Not quoted.
“This line is quoted
and so is this one
and so is this one.”
This is not quoted “but this is
and so is this.”

Ich benötige eine RegEx-Ersetzung, die die fest umschlossenen Anführungszeichen entpackt, d.h. " \r\n " mit einem Leerzeichen, aber nur zwischen den geschweiften Anführungszeichen.

So sollte es nach dem Austausch aussehen:

This line is not quoted.
This part of the line is not quoted “but this is.”
This one is not quoted either.
“This entire line is quoted”
Not quoted.
“This line is quoted and so is this one and so is this one.”
This is not quoted “but this is and so is this.”

(Beachten Sie, dass die letzten beiden Zeilen mehrere Zeilen im Eingabetext waren).

Zwänge

  • Idealerweise benötigen Sie einen einzigen Regex-Aufruf zum Ersetzen
  • Verwendung der .NET RegEx-Bibliothek
  • Die Zitate sind immer geschweifte Anführungszeichen am Anfang und am Ende, nicht einfach nur doppelte Häkchen ("), was die Sache ein wenig einfacher machen dürfte.

Wichtige Einschränkung

Dies ist kein direkter .NET-Code, ich fülle eine Tabelle mit "Suchen/Ersetzen mit"-Strings, die dann über RegEx.Replace aufgerufen werden. Ich habe nicht die Möglichkeit, benutzerdefinierten Code wie Match Evaluators, Schleifen durch erfasste Gruppen usw. hinzuzufügen.

Die bisherige Antwort lautet in etwa so:

r.Replace("(?<=“)\r\n(?=”)", " ")

Offensichtlich bin ich noch nicht einmal nahe dran.

Dieselbe Logik ließe sich beispielsweise auf die farbliche Kennzeichnung von Blockkommentaren im Programmiercode anwenden - alles, was sich innerhalb des Blockkommentars befindet, wird nicht auf dieselbe Weise behandelt wie das, was sich außerhalb des Kommentars befindet. (Code ist etwas kniffliger, da die Begrenzungszeichen für den Anfang/Ende eines Blockkommentars auch innerhalb einer wörtlichen Zeichenkette stehen können, ein Problem, mit dem ich mich hier nicht befassen muss).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X