Kniffeliger Regular Expression gesucht
Cruz
- perl
Hallo RegExp Profis,
ich habe hier eine textbasierte Datensammlung, die unglücklicher Weise das Komma (,) als Trennzeichen verwendet. Naja..das wäre ja nicht weiter schlimm, wenn in den Feldern nicht haufenweise Kommata vorkommen würden. :(
Um eine verlorene Schlacht noch zu retten, suche ich eine RegExp, mit der ich auf einen Schlag alle nicht-trennzeichen-kommata konvertieren kann. Diese Kommata lassen sich daran erkennen, daß sie zwischen Anführungszeichen (") und dabei nicht direkt neben dem Anführungszeichen stehen.
So könnte zum Beispiel ein Satz aussehen:
00001,897,5,"zeug","noch mehr zeug","laber, laber, text, geplapper"
"," <- solche Kommata müssen auch so bleiben, weil sie Trennzeichen sind
"laber, laber..." <- und solche müssen konvertiert werden
Kann mir da jemand weiterhelfen?
Gruß und Dank
Cruz
Hi,
ich habe hier eine textbasierte Datensammlung, die unglücklicher Weise das Komma (,) als Trennzeichen verwendet. Naja..das wäre ja nicht weiter schlimm, wenn in den Feldern nicht haufenweise Kommata vorkommen würden. :(
perldoc perlfaq4
"How can I split a [character] delimited string except when inside [character]?"
Cheatah
Hallo Cruz,
00001,897,5,"zeug","noch mehr zeug","laber, laber, text, geplapper"
Wenn Dein Datensatz wirklich so aussieht, kannst Du nach von Leerzeichen gefolgten Kommata suchen.
$ausdruck =~ s/, /komma /g;
Ich würde es allerdings andersherum machen ;-) Tausch doch einfach die Delimiter aus. Z.B.: ein einfaches Komma gegen etwas "komplexes" wie && oder %% oder so.
while ($ausdruck =~ /(\d+".+?")/g) { push @array, $1; }
print join ("&&", @array);
Aber Achtung: Das versagt bei leeren Feldern. ,, bzw. ,"",
Hofftenlich hilft Dir das weiter
Gruß AlexBausW