Mit Regex zum entfernen von Carriage-Returns in einer CSV-Datei in Notepad++
Ich habe eine CSV Datei, die ich brauche, um aufzuräumen. Dies ist eine einmalige Sache, so möchte ich es in Notepad++, wenn möglich.
Die CSV-Datei hat zwei Felder, von denen eingewickelt in Anführungszeichen. Ich möchte entfernen Sie alle Zeilenumbrüche aus innerhalb der angegebenen Bereich. Ich habe versucht, verwenden Sie diese Muster, kann aber nicht ganz richtig...
(.*)\"(.*)\n(.*)\"(.*)
Auch mich korrigieren, wenn ich falsch bin, aber ich nehme an, der "ersetzen mit" Wert wäre etwas entlang der Linien von:
\1\2\3\4
Vielen Dank im Voraus.
Ich bin auch offen für Alternative Lösungen, wie eine quick-and-dirty PERL-Skript.
InformationsquelleAutor Barry | 2009-06-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel Jagd rund um StackOverflow fand ich ein regex-pattern vorgeschlagen, für ein ähnliches problem, ich musste nur leicht ändern von einfachen Anführungszeichen, um doppelte Anführungszeichen ein. Ich lief in PERL. Es hat Super geklappt! Leider kann ich nicht finden, die original-Beitrag geben Kredit, in dem Kredit passend ist.
Sowieso, das ist, was ich schließlich auch verwendet. Danke an alle für Eure Hilfe!
InformationsquelleAutor Barry
In Fall, jemand findet es und will sich real legit Antwort für dieses problem in notepad++ Folgendes:
Verwenden Sie die Absatz-symbol/show Befehl unsichtbare Zeichen anzeigen, CR und LF.
Nun, beachten Sie, dass die wahre Zeilenvorschübe am Ende jeder csv-Datensatz sind in der Regel (hängt davon ab, was die Datei erstellt hat) NUR LFs. Die realen Datensatz-Trennzeichen NICHT EIN CR. Und jetzt beachten Sie, dass die Zeilenumbrüche, die sind eingebettet in ein Feld und eingewickelt in Anführungszeichen sind in der Regel CR/LFs (zwei nicht-Druck-Zeichen side-by-side, ein CR-und ein LF -)!
So, jetzt, IST ES EINFACH. Markieren Sie ein CRLF-Kombination, pull-up f&r, und Ihre 'suchen nach:' Eintrag sollte in zwei leere Boxen für die nicht-druckbaren CRLF-Kombination. Lassen Sie das ersetzen-Feld leer, und führen Sie es.
TADA! Nicht mehr eingebetteten Zeilenumbrüche innerhalb von Anführungszeichen, und alle um-echtes-line-feeds sind Links intakt.
InformationsquelleAutor Grrr
Barry hat die Lösung, und es wird die beste Lösung, die ich überall finden kann, und ich schaute in die Länge, denn ich fand zunächst, dass diese Lösung funktionierte nicht für mich in Perl.
Was ich gefunden habe ist, dass eine leichte Anpassung an, die regex gearbeitet. Ich bin nicht sicher, dass die Ursache dieser nuance, aber Perl ist nicht in der Lage zu finden, Wagenrücklauf, wenn es sieht für \n, aber nicht finden Wagenrücklauf bezeichnet in hex-form /x0D.
Also, statt:
$string123 =~ s/((?:^[^"]"|(?!^))[^"]?(?:"[^"]"[^"]?)?)(\n{1,})/$1/g;
Dieser arbeitete für mich:
$string123 =~ s/((?:^[^"]"|(?!^))[^"]?(?:"[^"]"[^"]?)?)(\x0D{1,})/$1/g;
Dank Barry, große Hilfe!
InformationsquelleAutor user877351
Habe ich festgestellt, dass problem und haben sich durchgesetzt mit Notepad++. Shreyas Antwort ist entweder falsch oder veraltet, da inzwischen mit \r\n in regexp suchen und ersetzen funktioniert. Das sagte ich Folgendes:
Die Weise, die es funktioniert, ist, dass es passt:
Wo somethin1 und somethin2 sind \2 und \3 (\1 ist der gesamte innere Teil) und somethin0 ist das Trennzeichen (Komma wahrscheinlich). Zu bekommen, was wir wollen, wir ersetzen mit:
Und bekommen das erwartete Ergebnis! Gut, meistens. Ersetzen-wie löscht einzelne newline-Zeichen innerhalb von Anführungszeichen. Das sollte jedoch nur eine kleine Unannehmlichkeit zu Spammen
replaceAll
- Taste ein paar mal (wobei "ein paar mal" ist die maximale Menge Zeilenumbrüche zwischen Anführungszeichen)InformationsquelleAutor Deltharis
Das problem mit Notepad++ ist, dass es nicht ermöglichen es Ihnen, eine regex-Sonderzeichen wie \n oder \t. Regex hat einen reinen regex und für Sonderzeichen gibt es in den erweiterten Suchmodus.
Ich würde vorschlagen, Sie führen Ihr regex auf Basis von Eclipse, wenn möglich.
Wenn das ist nicht möglich, hier eine quick-and-dirty-Lösung
Ersetzen Sie alle \n mit einem speziellen Zeichen sagen # oder & die nicht auftreten, in der Datei anders.
Nächsten Lauf deine regex zu suchen, für dieses spezielle Zeichen innerhalb von Anführungszeichen und löschen Sie Sie
Ersetzen endlich die restlichen Sonderzeichen mit \n
InformationsquelleAutor Shreyas
Klicken Sie auf die π-Taste, um die versteckten chars.
Wählen Sie dann eine carriage return char.
Drücken Sie Strg+H und ersetzen Sie Sie durch eine leere Zeichenfolge
Hoffe, es funktioniert für Sie.
InformationsquelleAutor Jonathan
Gut... meine RegEx ist schrecklich und ich kann deine Frage nicht beantworten. Aber hier ist eine schöne kleine JS-Funktion, die Sie verwenden können, sollte in der Lage sein, das zu tun, was Sie wollen.
InformationsquelleAutor illvm
Hier ist eine Antwort, die speziell für Notepad++
Menü:
TextFX > TextFX Edit > Delete
Leere ZeilenInnerhalb dieser Menüpunkt gibt es auch ein Löschen Überzählige Leere Zeilen option.
InformationsquelleAutor Haydar