Text aus String herausfiltern

  • Hi.

    Es geht sich um folgendes:

    Beispielstring: "34/2*6+a*400-var"

    Nun will ich alle Buchstaben ersetzen, nehmen wir mal an "a" und "ver" sind Variablen in denen Zahlen stehen. Nun sollen alle Buchstaben und zusammenhängende Buchstaben herausgefunden werden, damit ich sie ersetzen kann.

    Wie wird nun aus dem String oben, z.B. mit a = 5 und var = 10, "34/2*6+5*400-10", natürlich ohne das das "a" in "var" auch durch eine 5 ersetzt wird.

    :wacko:

    Einmal editiert, zuletzt von minx (13. Juli 2012 um 23:53)

  • Kommando zurück.

    Richtige Frage: Wie kann ich alle "Wörter", auch die die nur aus einem Buchstaben bestehen, durch "$Wort" ersetzen?

    Edit: Ja ich könnte mit Schleifen und Stringkommandos hantieren, aber das muss doch besser gehen. ;)

  • [autoit]

    Global $var = 'ersatz' ; Nur so random...
    MsgBox (0, '', StringRegExpReplace ('34/2*6+a*400-var', '[a-z]{1,}', $var))

    [/autoit]

    So etwa?

  • James
    Also sry, aber daraus werde ich nicht schlau. :D

    Soweit ich das noch nachvollziehen kann, ist das auch nicht das was ich suche. Es soll jedes beliebig langes Wort aus beliebig vielen Buchstaben durch $Sichselbst ersetzt werden. "Wörter" wie "a" oder "sgjbjrhg" oder "n" usw...

    @var ich probiers mal eben....

  • @var Nein.

    a und var sind verschiedene Variablen. Aber das ist egal ich kenne die Werte von "a" und "var" auch nicht.

    Hier nochmal vielleicht etwas deutlicher:

    Es soll aus "3+var+5" -> "3+$var+5" werden. Ich weißaber nie, ob da jetzt "var" steht oder "saadf" oder sonstwas. Einfach vor jedes Wort ein "$" schreiben, aber auch wenn das Wort nur einen Buchstaben lang ist.

  • Durch sich selbst ersetzen wird nicht so ohne weiteres möglich sein.
    Das "\b" in der regular Expression markiert die Begrenzungen eines Wortes, sodass "a" eben nicht in "var" ersetzt wird, sondern nur wenn es einzeln auftritt.
    Du könntest entweder ein Array mit Variablennamen erstellen und diese dann wie in meinem Beispiel einzeln durchgehen und mit Eval() durch den eigentlichen Wert ersetzen.
    Oder du setzt vor jedes "Wort" ein "$" und übergibst das Ganze dann an Execute():

    [autoit]

    StringRegExpReplace($String, "\b([a-z]+)\b", "\$$1")

    [/autoit]
  • Ah, dann müsste man es einfach so machen:

    [autoit]

    MsgBox (0, '', StringRegExpReplace ('34/2*6+a*400-var', '([a-z]{1,})', '\$$1'))

    [/autoit]