Schrift
[thread]12336[/thread]

RegEx: Zeile trennen mit Trenner ; und Feldern mit \;

Tags: Ähnliche Threads

Leser: 2


<< >> 4 Einträge, 1 Seite
zimso
 2008-08-11 00:43
#113305 #113305
User since
2008-08-11
1 Artikel
BenutzerIn
[default_avatar]
Hallo !

ich habe folgendes Problem und bräuchte einen
RegEx der mir diese Zeile trennt. Der Treener ist ein Semikolon,
aber es kann in einem Feld ein quotierter Semikolon vorkommen,
und da soll dann nicht getrennt werden:

abc;123;ab\;12;zzz;yyy;

soll die folgenden Werte ergeben:

abc
123
ab\;12
zzz
yyy

Ein /^([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/
geht ja leider nicht, da das eine Feld ein \; enthält und er daran scheitert.

Für Hilfe wäre ich sehr dankbar !!!!

Danke & Gruesse
Tim
Linuxer
 2008-08-11 01:00
#113307 #113307
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Code (perl): (dl )
1
2
3
4
5
6
use strict;
use warnings;

my $text = q~abc;123;ab\;12;zzz;yyy;~;

my @fields = split m{(?<!\\);}, $text;


perlre

Stichworte:
Extended Patterns
zero-width negative look-behind assertion.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-08-11 08:27
#113315 #113315
nutze eines der vielen CSV-Module von Cpan, das macht das für dich korrekt.
murphy
 2008-08-11 17:43
#113355 #113355
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Linuxer+2008-08-10 23:00:45--
Code (perl): (dl )
1
2
3
4
5
6
use strict;
use warnings;

my $text = q~abc;123;ab\;12;zzz;yyy;~;

my @fields = split m{(?<!\\);}, $text;

[...]


Und wenn jemand einen gequoteten Backslash in die Datei schreibt -- also zum Beispiel abc;d\\;ef -- verhält sich dieser Regex wieder falsch...

Da würde ich doch auch lieber auf ein Modul zurückgreifen, dass CSV ordentlich parsen kann.
When C++ is your hammer, every problem looks like your thumb.
<< >> 4 Einträge, 1 Seite



View all threads created 2008-08-11 00:43.