Regex, um Kommas zu finden, ohne Kommas in einer durch doppelte Anführungszeichen abgegrenzten Zeichenfolge

3

Ich möchte eine geschlossene CSV-Datei bearbeiten, ohne sie über eine Schaltfläche in einem Excel-AddIn zu öffnen. Ich kann alle Schritte ausführen, habe jedoch ein Problem damit, einen regulären Ausdruck zu finden, mit dem dies erreicht werden kann. (Es gibt mehrere Antworten auf ähnliche Fragen im Internet auf verschiedenen Anschlagtafeln, und keine davon funktioniert wirklich.

Hier ist ein Beispielcode, mit dem die Lösung aussehen sollte:

enter image description here

Ich habe mehrere reguläre Ausdrücke ausprobiert, finde aber anscheinend keine Lösung. Meine nächsten Versuche sind:

enter image description here

Ich glaube, dass es eine Möglichkeit geben muss, dies zu tun. Irgendeine Hilfe, wo ich falsch liege?

Francois
quelle
Sehr häufiges Problem. Sie können dies nicht in einer Regex-Anweisung lösen. Es wird wahrscheinlich möglich sein, ein Paar nach dem anderen zu verwenden, aber ich glaube nicht, dass Regex das beste Werkzeug ist, das Sie hier verwenden können. AWK könnte eine bessere Option sein. Und ich weiß, dass es kostenlose Tools gibt, die genau diese Art von "CSV" -Manipulationen ausführen. Ich kann den Link einfach nicht finden.
Wouter

Antworten:

2

Sie können dies in zwei Durchgängen tun. Erstens, um nicht zitierte Kommas zu ersetzen:

/(?!\B"[^"]*),(?![^"]*"\B)/\|/gm

Input                               Output
---------------------------------   ---------------------------------
aaa,bbb,ccc,"ddd,eee","fff,ggg"     aaa|bbb|ccc|"ddd,eee"|"fff,ggg"
"aaa,bbb",ccc,ddd,"eee,fff"         "aaa,bbb"|ccc|ddd|"eee,fff"
"aaa,bbb","ccc,ddd","eee,fff",ggg   "aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg

Hier ist eine Online-Demo des ersten Schritts

Dann erhalten Sie durch einfaches Ersetzen von "durch nichts" das gewünschte Endergebnis:

/"//gm

Input                               Output
---------------------------------   ---------------------------------
aaa|bbb|ccc|"ddd,eee"|"fff,ggg"     aaa|bbb|ccc|ddd,eee|fff,ggg
"aaa,bbb"|ccc|ddd|"eee,fff"         aaa,bbb|ccc|ddd|eee,fff
"aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg   aaa,bbb|ccc,ddd|eee,fff|ggg

Und hier ist eine Online-Demo des zweiten Schritts

Dies basiert auf Diese Antwort auf Stack Overflow .

Andre Terra
quelle