seth: regulärer Ausdruck zum Parsen einer Koordinate gesucht

Beitrag lesen

gudn tach Robert!

auspacken!

/([+-])?([\d.]+)[^\d.SWNE]*([\d.]+)?[^\d.]*?([\d.]+)?[^\d.]*?(S|W|N|O)?$/;

Es ist wohl ersichtlich wieso ich auf die Regex nicht allzu stolz bin. Und obwohl sie bisher alle Tests überstand bin ich mir noch nichtmal sicher dass sie alles schluckt.

auf den ersten blick faellt mir bloss auf, dass du statt (S|W|N|O)? kuerzer ([SWNO])? schreiben solltest, was uebersichtlicher _und_ schneller in der ausfuehrung ist. sonst ist's eigentlich ok.

mit dem x-modifier (siehe perldoc perlre) kannst du den code etwas uebersichtlicher gestalten und auch kommentieren.

$str=~/^([+-]?)(.*?)([NSWO]?)\s+\z/;
my $vorzeichen = $1;
my $himmelsrichtung = $3;
my @zahlen = split /[^+0-9.-]+/, $2;

hab's nicht ausprobiert. aber so in etwa sollte es funzen.

Danke Dir!
Wenn ich \s+ weglasse, funktioniert es.

oops, ja, haette ein \s* sein sollen.

Je einfacher der Ausdruck zu lesen (für den Menschen) und je schneller er auszuführen ist, desto besser.

haeufig frisst das eine das andere.

So anscheinend auch hier.
Mein Bandwurm benötigt ca. 40% weniger Zeit, ist aber schlechter lesbar.

hmm, bei mir sind's 30%. 40% bekomm ich erst hin, wenn ich die himmelsrichtungsabfrage wie oben beschrieben aendere.

wenn dir geschwindigkeit wichtig ist (d.h. wenn der kram mehrere tausend mal in kurzer zeit aufgerufen werden soll), dann wuerde ich an deiner stelle die schnellere variante nehmen.

prost
seth