Regulärer Ausdruck - Schlüsselwertpaar
Hi,
ich sitz jetzt schon eine halbe Ewigkeit daran und schaff es mit RegEx einfach nicht, meine Frage jetzt ob das so überhaupt funktioniert wie ich es mir gedacht habe...
Als zu durchsuchender bzw. zu ersetzender String dient mir der Folgende:
Für jeden Beistrich der so ein Wertpaar trennt möchte ich nun ne zufällige Zahl einfügen, sprich diesen ersetzen. Es gibt aber die Möglichkeit den Beistrich im Schlüssel als auch im Wert zu definieren (nur wenn der jeweilige Teil im Hochkomma ist). Siehe:
Nun zum wichtigsten aller Dinge, der reguläre Ausdruck.
Für den Schlüssel habe ich
vorgesehen.
Bei der Zuweisung können sowohl links und rechts vom = Leerzeichen, Tabs oder sonst was sein:
und dann noch der Wert inklusive Beistrich
.
Ergibt:
Mir ist klar dass ich hier am Ende eines solchen Paares den Beistrich voraussetze, was aber erstmal egal sein sollte.
Was funktioniert jetzt nicht?
Solang ich als Wert eine Zahl nimm ersetzt er den Beistrich korrekt, wenn ich jetzt aber als Wert einen String definiere, wird der Beistrich ignoriert.
Falsch:
Würd mich freuen wenn sich einer kurz die Zeit nimmt, danke.
Hi,
ich sitz jetzt schon eine halbe Ewigkeit daran und schaff es mit RegEx einfach nicht, meine Frage jetzt ob das so überhaupt funktioniert wie ich es mir gedacht habe...
Als zu durchsuchender bzw. zu ersetzender String dient mir der Folgende:
Code:
'"a" = "b", "d" = 55.1, c="x", x=5'
Für jeden Beistrich der so ein Wertpaar trennt möchte ich nun ne zufällige Zahl einfügen, sprich diesen ersetzen. Es gibt aber die Möglichkeit den Beistrich im Schlüssel als auch im Wert zu definieren (nur wenn der jeweilige Teil im Hochkomma ist). Siehe:
Code:
"a,b" = "x,y" // +
a53k = 53.32 // +
54k = 43.23 // - weil der Schlüssel mit einer Zahl beginnt
a,b = "x,y" // -
"a,b" = x,y // -
Nun zum wichtigsten aller Dinge, der reguläre Ausdruck.
Für den Schlüssel habe ich
Code:
("[\S]+"|[a-z]{1}[a-z0-9_]*)
Bei der Zuweisung können sowohl links und rechts vom = Leerzeichen, Tabs oder sonst was sein:
Code:
[\s]*=[\s]*
Code:
(".+"|[0-9]+\.?[0-9]*)[\s]*,
Ergibt:
Code:
'("[\S]+"|[a-z]{1}[a-z0-9_]*)[\s]*=[\s]*(".+"|[0-9]+\.?[0-9]*)[\s]*,'
Mir ist klar dass ich hier am Ende eines solchen Paares den Beistrich voraussetze, was aber erstmal egal sein sollte.
Was funktioniert jetzt nicht?
Solang ich als Wert eine Zahl nimm ersetzt er den Beistrich korrekt, wenn ich jetzt aber als Wert einen String definiere, wird der Beistrich ignoriert.
Falsch:
Code:
Eingabe: '"a" = "b", "d" = 55.1, c="x", x=5'
Ergebnis falsch: "a"="b", "d" = 55.1, c="x"ERSETZT x=5ERSETZT
Ergebnis richtig: "a"="b"ERSETZT "d" = 55.1ERSETZT c="x"ERSETZT x=5ERSETZT
Code:
Eingabe: '"a" = 421, "d" = 55.1, c=12, x=5'
Ergebnis richtig: "a"=421ERSETZT "d"=55.1ERSETZT c=12ERSETZT x=5ERSETZT
Würd mich freuen wenn sich einer kurz die Zeit nimmt, danke.
Zuletzt bearbeitet: