Perl Split-Liste auf Kommas, außer wenn in Klammern?

8

Ich habe eine Datenbank mit einer Anzahl von Feldern, die kommagetrennte Werte enthalten. Ich muss diese Felder in Perl aufteilen, was einfach genug ist, außer dass einige der Werte von verschachtelten CSVs in Klammern gefolgt sind, die ich nicht teilen möchte.

Beispiel:

%Vor%

Teilen auf "," gibt mir:

%Vor%

Was ich will ist:

%Vor%

Können irgendwelche Perl Regex (perts) helfen?

Ich habe versucht, eine Regex-Zeichenkette zu ändern, die ich in einer ähnlichen SO gefunden habe post , die keine Ergebnisse zurückgibt:

%Vor%     
calyeung 24.02.2012, 17:52
quelle

4 Antworten

9

Versuchen Sie Folgendes:

%Vor%     
raina77ow 24.02.2012, 18:12
quelle
2

Die Lösung, die Sie gewählt haben, ist besser, aber für diejenigen, die sonst etwas sagen würden, haben reguläre Ausdrücke ein Rekursionselement, das mit geschachtelten Klammern übereinstimmt. Folgendes funktioniert gut

%Vor%

, auch wenn die Klammern weiter verschachtelt sind. Nein, es ist nicht schön, aber es funktioniert!

    
Borodin 24.02.2012 18:57
quelle
0

Hat jemand gesagt, dass Sie es in einem Schritt tun müssen? Sie können Werte in einer Schleife teilen. In Ihrem Beispiel könnten Sie so etwas verwenden.

%Vor%     
Caldrin 24.02.2012 18:47
quelle
0

Ein anderer Ansatz, der Schleifen und split verwendet. Ich habe die Leistung nicht getestet, aber sollte dies nicht schneller sein als die Look-Ahead-Regexp-Lösungen (wenn die Länge von $str zunimmt)?

%Vor%     
Unos 24.02.2012 19:28
quelle

Tags und Links