2016-08-03 19 views
-2

Ich habe ein CSV-Format, das ich zu standardisieren versuche, sodass ich es im SQL-Server in einem traditionelleren Sinne über Masseneinfügungen laden kann. Die Herausforderung besteht darin, dass jedes Feld in einem doppelten Anführungszeichen eingeschlossen werden kann, wenn das Feld das Trennzeichen als Zeichen dafür enthält, dass es maskiert werden soll.Regex-Ausdruck zum Ersetzen von Begrenzern mit optionalen Textqualifizierern

Ich versuche im Wesentlichen einen Regex-Ausdruck zu konstruieren, um die Trennzeichen und Textqualifizierer zu finden, die ich dann verwenden kann, um zu ersetzen, was gefunden wird, mit einem anderen Text, z. <FIELDST> so werden alle Felder für einfaches Laden standardisiert.

Insbesondere können Zeilen kommen in als solche:

f1,f2,"Company A Containing Comma,Ltd",f3,23,abc 
f1,f2,Company B Without Comma,f3,23,"de,f" 

Gewünschtes Ergebnis: Ersetzen Sie alle mit unbekannt regulären Ausdruck mit <FIELDST> gefundenen Werte zu erzeugen:

f1<FIELDST>f2<FIELDST>Company A Containing Comma,Ltd<FIELDST>f3<FIELDST>23<FIELDST>abc 
f1<FIELDST>f2<FIELDST>Company B Without Comma<FIELDST>f3<FIELDST>23<FIELDST>de,f 

Leider I haven‘ Ich hatte viel Glück, also wäre jede Hilfe großartig!

+0

Vielleicht ist ein CSV-Parser besser als Regex für diesen Job? –

Antwort

0

Mit Regex müssen Sie wahrscheinlich 2 Ersetzungen tun.

Diese Regex wird mit den Kommas und Anführungszeichen übereinstimmen.
aber nicht die Kommas innerhalb der doppelten Anführungszeichen:

"?,"|"?,(?![^"]*"(?:,|$))

-> ersetzen durch <FIELDST>

Aber das wird die doppelten Anführungszeichen am Anfang und am Ende nicht entfernen/ersetzen der Linien.
Also müssen diese noch entfernt werden.

-> ersetzen " durch nichts.