Hallo, Am Thu, 16 Jul 2020, Joachim H. schrieb:
Ich muss einen Ausdruck der folgenden Form auseinander nehmen:
"(x,y)(a,b)(c,d)..."
x, y, etc sind Fließkommazahlen, sowas wie 1, 2.3, 1e-4, -3.14159
in einem ersten Schritt sollen alle Klammern gefunden werden, also "(x,y)" "(a,b)" ...
Daran scheitere ich.
Mit "(\(.*\))+" z.B findet er nur den gesamten String und nicht die einzelnen Klammern.
Ich wüsste nicht, was ich ändern müsste.
$ printf '(1,2.3)(1e-4,5)(-3.14159,1)\n (2.3,2.78E-2)(6e-2,-3.14)\n' |\ perl -ne ' chomp; $l = $_; do { if ( $l =~ s/^\s*\(([\d.eE-]+),([\d.eE-]+)\)// ) { printf("[ % f, % f ]\n", $1, $2); } } while($l); ' [ 1.000000, 2.300000 ] [ 0.000100, 5.000000 ] [ -3.141590, 1.000000 ] [ 2.300000, 0.027800 ] [ 0.060000, -3.140000 ] Noch Fragen? -dnh -- [Auszug aus man grep] Und spaetestens jetzt sollte niemand mehr denken, dass regulaere Ausdruecke gleich regulaeren Ausdruecken seien ;-) [Eilert Brinkmann in suse-linux] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org