2017-08-07 1 views
1

Ich habe eine Liste von Werten, die durch Kommata wie folgt getrennt:Capturing Komma innerhalb Text von comma separated values ​​

bDestruction = True, bEmissionAlarme = False, bActionReinit = False, sNatureData = "Sur évènement provenant d‘ ALIS ou SGP - Lignes BJ, IJ ou GMO“, sCodeMsgExpliControle = "MSG-G00033_P_ALIM_ME"

ich beide Parameter und Wert erfassen wollen, so habe ich diese Regex:

(?:([^=]*))="?([^,]*)(?:"|,)? 

Aber wie es in den meisten Fällen funktioniert, ist er nicht für das Beispiel vorgesehen, da der Text nach sNatureData ein Komma enthält. Daher denkt die Regex, dass es das Ende eines Paares ist {Parameter = Wert} und einen Fehler auslöst.

Was kann getan werden? Vielen Dank im Voraus.

+0

Ich denke, man könnte hier mit einem Parser zu betrachten. Der Komma-Inhalt wird korrekt zitiert, um uns mitzuteilen, dass das, was in den Anführungszeichen steht, nicht als Trennzeichen betrachtet werden sollte. Vielleicht können Sie uns einen größeren Kontext dafür geben, wo diese Schlüssel/Werte erscheinen. –

+0

Sicher, ich muss erfassen, um Daten in Tabellen zu injizieren, mit INSERT INTO TABLE (Parameter) Werte (Werte) – v01dv01d

+0

Sie möchten vielleicht auf das folgende aussehen: https://stackoverflow.com/questions/1293147/jicascript-code -to-parse-csv-data – zerohero

Antwort

1

Ich würde vorschlagen, dass Sie den Vorschlägen folgen, die Ihnen in den Kommentaren gegeben wurden, und Regex nicht verwenden.

Wenn Sie jedoch haben müssen diese mit Regex tun, die folgenden sollte es tun:

(.*?)=("?)([^"]+?)\2(?:,|$) 
  • (.*?)= Fängt die Taste links von der = Zeichen. Es erfasst nur einen Schlüssel, weil ? so wenig Zeichen wie möglich abgleicht.
  • ("?) Erfasst, ob der Wert in Anführungszeichen steht oder nicht.
  • ([^"]+?)\2(?:,|$)
    • ([^"]+?) Erfasst mehr als 1 Zeichen, das nicht ", aber so wenig wie möglich ist.
    • \2(?:,|$) Dies stoppt entweder, wenn es ein Zitat gab und es wieder findet, oder beim nächsten Komma oder wenn die Zeichenfolge beendet ist.

Test online

+0

Um ehrlich zu sein, bin ich fast neu in Regex und das \ 2 war das, was ich bisher gesucht habe. Vielen Dank für Ihre Antwort, einen schönen Tag. – v01dv01d

+0

@ v01dv01d Sie sind herzlich willkommen! – SchoolBoy

Verwandte Themen