seth: Punkt gegen Komma tauschen mit Nebenbedingungen

Beitrag lesen

gudn tach!

ungetestetes beispiel:
$test=~s/([ +-]\d+).(\d+(\D{2}|\D$|$))/$1,$2/g;
Dies funktioniert leider nicht so wie ich mir das vorstelle. Im Beispielstring bleibt z.B. der Punkt bei +5.644 stehen.

so, jetzt sitze ich wieder an einem rechner, bei dem ich besser denken, schreiben und auch testen kann. ja, das, was ich mailte, war nicht gut.
fuer dein _spezielles_ _beispiel_ (und noch einige faelle mehr) waere aber geeignet:
$test2=~s/((?:^|\G|[ +-])\d+)\.(\d+)(?!\d|\.\d)/$1,$2/g;

hier wird von links eine zahl begrenzt von /^|\G|[ +-]/
und direkt nach einer zahl darf kein zeichen stehen, welches eine ziffer ist. ferner darf einer zahl nicht die zeichenfolge "[punkt][ziffer]" folgen.

was die dinger bedeuten, die du evtl. noch nicht kennst (z.b. "\G"), steht imho sehr gut erklaert auf "perldoc perlre"

Das Beispiel (siehe erstes Posting) ist anscheinend doch nicht so anschaulich, wie ich gehofft hatte.

jein. es umfasst schon ein menge faelle, jedoch wissen wir damit ja noch nicht, ob damit schon alle faelle abgedeckt sind, die bei dir auftreten koennen. allgemein ist dieses problem nicht zu loesen, denn woher will man wissen, ob in dem string "12.2004-10.2005" die subtraktion der zahlen 12,2004 und 10,2005 gemeint ist oder der zeitraum von dez. 2004 bis okt. 2005?
deswegen bat dich Siechfred gleich als erstes nach mehr informationen.

Hier also die abstrakte Beschreibung:

rischdisch. mit sowas sollte man bei solchen problemen anfangen.
und jene beschreibung sollte zwar abstrakt, aber genau und eindeutig sein, damit man's dem doofen computer auch gescheit beibringen kann.

Gegeben sei ein Teil eines Strings, bestehend aus Ziffern, Punkten und Kommata, welcher mit einer Ziffer anfängt und aufhört (Die Zeichen vorher und nachher sind beliebig).

wirklich beliebig? duerfen es auch ziffern sein? afais nicht.
also: welche zeichen oder strings begrenzen eine zahl von links und welche von rechts?

prost
seth