Zeichen nur an bestimmter Stelle ersetzen

  • Zeichen nur an bestimmter Stelle ersetzen

    Hallo,

    angenommen ich habe folgende Formel:

    Quellcode

    1. (7,946 m * 2,500 m) - (0,636 + 4,600) + 2 * 5,225 m * 2,500 m + 7,946 m * 2,500 m


    Nun möchte ich alle "+" und "-" Zeichen, die außerhalb vom Klammern liegen durch "\r\n+" bzw. "\r\n-" ersetzen.

    Nun fehlt mir leider echt ein Denkansatz… Würde mich freuen wenn ihr mir helfen könnt.

    Danke.


  • Ist bei einem völlig dynamischen Aufbau der Formel, also die hat nicht immer die selber Struktur, recht umständlich oder nicht?

    Edit:
    Ich habe die Zeilenumbrüche jetzt während ich die Maßkette generiere eingefügt. Nun passt es.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DBocksteger ()

  • Ich bin nicht sicher ob regex das überhaupt kann, falls mehrfache Klammern vorkommen können,

    also (1 + (2 + 3) + (4 + 5)) + 6

    Sonst grob:
    for each character
    if ( nesting++
    if ) nesting --
    else if + and nesting == 0 => print "\n"
    else if - and nesting == 0 => print "\n"
    else print character

    D.h. man zählt wieviele Klammern noch nicht geschlossen wurden. Wenn alle zu sind dann wird ersetzt.
    Dazu musst Du einfach einen neuen NSMutableString zusammensetzen.
  • hns schrieb:

    Ich bin nicht sicher ob regex das überhaupt kann, falls mehrfache Klammern vorkommen können,

    also (1 + (2 + 3) + (4 + 5)) + 6

    Sonst grob:
    for each character
    if ( nesting++
    if ) nesting --
    else if + and nesting == 0 => print "\n"
    else if - and nesting == 0 => print "\n"
    else print character

    D.h. man zählt wieviele Klammern noch nicht geschlossen wurden. Wenn alle zu sind dann wird ersetzt.
    Dazu musst Du einfach einen neuen NSMutableString zusammensetzen.


    vor allem sollte der ansatz viel effektiver sein als irgend ein regex ;)
  • hns schrieb:


    Ich bin nicht sicher ob regex das überhaupt kann, falls mehrfache Klammern vorkommen können,


    Natürlich nicht, reguläre Ausdrücke erkennen reguläre Sprachen, für verschachtelte Klammern brauchst du aber ein kontextfreie Sprache. :P

    gritsch schrieb:


    vor allem sollte der ansatz viel effektiver sein als irgend ein regex ;)


    Reguläre Ausdrücke sind sehr effektiv und schnell. Allerdings, wie oben, für verschachtelte Klammern nicht geeignet, es sei denn du nimmst rekursive reguläre Ausdrücke. ^^