Schrift
[thread]5928[/thread]

Reguläre Ausdrücke beim Splitten



<< >> 9 Einträge, 1 Seite
Arasiel
 2003-11-25 14:09
#72828 #72828
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte Zeilen splitten:
Eine Zeile ist z.B. so aufgebaut:
name, vorname, strasse,plz,     ort, telefon
name1,  vorname1, strasse, plz, ort, telefon

Gesplittet werden soll nach dem Komma, wobei man nie weiss, wieviele Leerzeichen oder Tabstopss dazwischen liegen!
Das soll über reguläre Ausdrücke gelöst werden.

Ich habe folgendes versucht, aber nichts davon funktioniert einwandfrei.
Code: (dl )
	@fields = split(/\,\s\*/g, $items[1]);

oder:
Code: (dl )
	@fields = split(/\s*,\s\*/g, $items[1]);

...

Aber es wird mir immer nur ein Teil ausgegeben.
Was mache ich falsch?

Gruss,

Markus
Heromaster
 2003-11-25 16:25
#72829 #72829
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
[quote=Arasiel,25.11.2003, 13:09][/quote]
Code: (dl )
@fields = split(/\,\s*/, $items[1]);

..sollte helfen. Dein Fehler war, das Du die besondere Bedeutung von * genommen hast, indem Du einen Backslash vorangestellt hast.
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
Dubu
 2003-11-29 14:19
#72830 #72830
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn ich ketzerisch waere, wuerde ich ja jetzt fragen, welche die besondere Bedeutung von "," ist, die du durch den vorangestellten Backslash zu nehmen versuchst. ;)
Crian
 2003-11-29 16:21
#72831 #72831
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
^^ - das sieht man häufig, unnötig escapete Zeichen in regulären Ausdrücken. Auch gern genommen in Zeichenklassen, wo die vermeintliche Escapung nur dazu führt, dass der Backslach mit in die Zeichenklasse aufgenommen wird.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2003-11-29 16:55
#72832 #72832
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Crian,29.11.2003, 15:21]Auch gern genommen in Zeichenklassen, wo die vermeintliche Escapung nur dazu führt, dass der Backslach mit in die Zeichenklasse aufgenommen wird.[/quote]
hmm?
Code: (dl )
1
2
3
4
5
$ perl -wle'
$_="test komma , backslash \\ ende";
s/[\,]//g;
print'
test komma  backslash \ ende
\n\n

<!--EDIT|pq|1070117762-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2003-11-29 19:24
#72833 #72833
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Was ich meinte war folgendes, was allerdings nicht so klappt, wie ich es erwartet hatte:

Code: (dl )
1
2
3
4
5
use strict;

my $text = 'abc\def';

print "'$text' enthält Umlaut!" if $text =~ m~[\ä\ö\ü\ß\Ä\Ö\Ü]~;


Ich hatte erwartet, dass die Printausgabe kommen würde, denn ich habe es irgendwo so gelesen. Ev. war das aber im Buch "Reguläre Ausdrücke" von Jeffrey E. F. Friedl bezogen auf eine andere Geschmacksrichtung von Regulären Ausdrücken.

Jedenfalls sind die Backslashes da oben überflüssig... aber anscheinend auch nicht falsch - interessant.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
KKO
 2003-11-30 14:41
#72834 #72834
User since
2003-11-05
124 Artikel
BenutzerIn

user image
ist ja kein Umlaut im $text, also wird print nicht ausgeführt
Gruß
KKO
Crian
 2003-11-30 15:05
#72835 #72835
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ach ^^

Wie ich oben ausführte meinte ich mich zu erinnern gelesen zu haben, dass Backslash in Zeichenklassen dazu führt, in diese aufgenommen zu werden.

Falls das so gewesen wäre, hätte es eine Ausgabe gegeben, obwohl keine Umlaute im Text sind.

Also lieber ganzen Thread lesen vor einer vorschnellen Antwort ;)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
betterworld
 2003-11-30 22:18
#72836 #72836
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Was ich ganz fuerchterlich schlimm finde sind solche Sprachen wie sed, wo z. B. \) eine besondere Bedeutung hat, ) aber nicht.
Edit: Der Smiley da ist eine escapete Klammer zu.\n\n

<!--EDIT|betterworld|1070223641-->
<< >> 9 Einträge, 1 Seite



View all threads created 2003-11-25 14:09.