Ersetzen von Text in Notepad ++ zwischen zwei Trennzeichen über mehrere Zeilen hinweg

1828
EdinTexas

Eine durch Kommas getrennte Datei wird erstellt, wenn Sie Google-Kontakte in das sogenannte "Google CSV-Format (zum Importieren in ein Google-Konto)" exportieren. Das Problem ist, dass dieses Format Notizen in mehreren Zeilen verarbeitet, indem der Text in Anführungszeichen eingefügt wird und CRLF mit diesen Anführungszeichen zugelassen wird.

Stellen Sie sich also einen Datensatz mit Name, Hinweis, E-Mail vor, wenn eine mehrzeilige Notiz in der CSV-Datei enthalten ist:

Name, "Beachten Sie FirstLine \ r \ n

SecondNoteLine \ r \ n

Lastnoteline ", email.addr @ domain.net \ r \ n

Der gleiche Datensatz ohne Notizfeld sieht wie folgt aus und befindet sich in einer einzelnen Zeile (mehr Standard):

Name ,, email.addr @ domain.net \ r \ n

Ich versuche, den korrekten Regex-Ausdruck zu formen, und habe versucht, es aus dem Abschnitt Gewusst wie: Reguläre Ausdrücke in Notepad ++ (Tutorial) zu verwenden, ohne Erfolg.

Das nächste, was ich bekommen habe (nicht sehr nahe), ist
\ ". *, \"

mit. Passende Zeilenumbrüche.

Der Ausdruck, den ich versuche zu passen, ist:

"Wählen Sie den Text zwischen," und "nur aus, wenn es ein oder mehrere / r / n" "gibt und ersetzen Sie sie mit NUL."

In den ablove-Beispielen wären also beide Datensätze identisch, und ich kann jeden Kontaktdatensatz in einer einzigen Zeile anzeigen und in Excel importieren.

Zu diesem Zeitpunkt bluten meine Augen und jede Hilfe wäre dankbar.

1

1 Antwort auf die Frage

2
Pimp Juice IT

Das Folgende hat für mich mit Notepad ++ genauso funktioniert, wie Sie erklären, dass Sie es benötigen, und auch mit den Beispieldaten, die Sie in Ihrer Frage angegeben haben.

Beleuchtung . . .

Kamera . .

  1. Finde was: ((?:^|\r\n)[^"]*+"[^\r\n"]*+)\r\n([^"]*+")
  2. Ersetzen mit: $1 $2
  3. Stellen Sie sicher, dass die Option Regulärer Ausdruck aktiviert ist
  4. Stellen Sie sicher, dass die Option Wrap Around aktiviert ist
  5. Drücken Sie Replace Allso oft, wie Sie benötigen, um die endgültigen und erwarteten Ergebnisse für Ihre Datensätze zu erhalten

Aktion . . .


Erläuterung:

( (?:^|\r\n) Begin at start of file or before the CRLF before the start of a record [^"]*+ Consume all chars up to the opening " " Consume the opening " [^\r\n"]*+ Consume all chars up to either the first CRLF or the closing " ) Save as capturing group 1 (= everything in record before the target CRLF) \r\n Consume the target CRLF without capturing it ( [^"]*+ Consume all chars up to the closing " " Consume the closing " ) Save as capturing group 2 (= the rest of the string after the target CRLF) 

Hinweis: Der * + ist ein Possessiv-Quantifizierer. Verwenden Sie sie entsprechend, um die Ausführung zu beschleunigen.

Aktualisieren:

Diese allgemeinere Version des Regex wird mit jeder Zeilenumbruch - Sequenz arbeiten ( \r\n, \roder \n):

((?:^|[\r\n]+)[^"]*+"[^\r\n"]*+)[\r\n]+([^"]*+")

Quelle

Beeindruckend! Vielen Dank für die Lösung und die Erklärung, die mich Amok laufen lässt! Vielen Dank!!! EdinTexas vor 7 Jahren 0
@ EdinTexas - Ich bin froh zu hören, dass Sie Ihr Problem gelöst haben. Wenn Sie eine Chance haben, drücken Sie bitte das Häkchen, um es in der oberen linken Seite meiner Antwort grün zu machen, um es als akzeptierte Antwort zu akzeptieren Sie haben dazu beigetragen, Ihre Anfrage zu lösen und die Schleife zu schließen. Sehen Sie sich [Annehmen einer Antwort] an, um zu sehen, was Sie überprüfen müssen usw., falls Sie nicht bereits vertraut sind. Vielen Dank!! Pimp Juice IT vor 7 Jahren 0