StringRegExp / String splitten

  • Hallo,

    ein Thema was mir leider garnicht liegt ist dieses StringRegExp! Ich hoffe da auf Eure Hilfe!

    Also ich habe ein String der wie folgt aussieht: ID1 F2 A3

    Ich habe immer ein ID, ein F, und ein A gefolgt von irgendeiner Zahl. ich möchte nun diese drei Werte aufsplitten, auch wenn die Zahlen mal in den Zehnerbereich gehen. Am besten wäre es wenn es dann zum Schluss so aussieht:

    $string[0] = ID1
    $string[1] = F2
    $string[2] = A3

    Es sind nicht immer Leerzeichen dazwischen und Groß-/Kleinschreibung kann variieren!

    Wäre schön wenn da jemand nen Code für mich hätte!

    Einmal editiert, zuletzt von Morrison (9. März 2013 um 11:02)

  • probiers mal so :

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sString = "id1F2 a3"
    $aStrReg = StringRegExp($sString,"(?i)(ID\d+?) ?(F\d+?) ?(A\d+)",3)
    _ArrayDisplay($aStrReg)

    [/autoit]
  • [autoit]


    ;i Schau dir mal StringSplit in der dt. Hilfe an.
    ;i Besonders die Beschreibung.
    Local $tring = "ID1 F2 A3"
    Local $array = StringSplit($tring, "")
    MsgBox(0, "", $array[0] & $array[1] & $array[2] & $array[3] & $array[4] _
    & $array[5] & $array[6] & $array[7] & $array[8] & $array[9])
    MsgBox(0, "", $array[1] & $array[2] & $array[3] & @CRLF & $array[5] _
    & $array[6] & @CRLF & $array[8] & $array[9])
    Exit
    ; Ende

    [/autoit]
  • Und vorallem bei Zehnerbereichen auch nicht.
    Übriegens brauchst du kein Exit, das Script beendet sich am Ende von selber ;)
    Und Local verwendet man in Funktionen.

  • Meine Lösung:

    [autoit]

    $String = "ID1 F2 A3"

    [/autoit][autoit][/autoit][autoit]

    $SRE = StringRegExp($String, "(?i)((?:ID|F|A)\d+)", 3)
    If @error Then Exit

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound($SRE)-1 ; <- sollte eigentlich 2 sein...
    ; Die Reihenfolge ist dann wie in dem String,
    ; d.h. bei IDx Ax Fx wäre F in $SRE[2].
    ; Beim Verarbeiten sollte sich das mit StringLeft aber leicht überprüfen lassen.
    ConsoleWrite($SRE[$i] & @CRLF)
    Next

    [/autoit]
  • Und meine ;)

    [autoit]

    #include <String.au3>
    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $sString = "ID1 F2 A3"

    [/autoit][autoit][/autoit][autoit]

    $sString = _StringInsert($sString, " ", StringInStr($sString, "F") - 1)
    $sString = _StringInsert($sString, " ", StringInStr($sString, "A") - 1)
    $sString = StringStripWS($sString, 4)

    [/autoit][autoit][/autoit][autoit]

    Global $aString = StringSplit($sString, " ", 3)

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($aString)

    [/autoit]