Regexp hilfe

  • Hallo,

    Ich komme einfach nicht weiter.

    Aus den folgenden Zeilen soll er folgenden finden:

    Ergebnis:
    F/O T.G.Leggett
    Sgt W.A.Edwards
    F/O R.H.Beer
    P/O A.A.Wilks
    F/S L.Ireland RAAF
    F/O J.G.Apostilides PoW
    F/O A.V.M.Jones

    Code
    causing F/O Legget to lose control. The order was given and F/O Apostilides left.  F/O T.G.Leggett Sgt W.A.Edwards F/O R.H.Beer P/O A.A.Wilks F/S L.Ireland RAAF F/O J.G.Apostilides  PoW F/O A.V.M.Jones.  F/O J.G.Apostilides was interned in Camp L3.


    Ergebnis:
    Sgt R.K.Anson KIA
    P/O B.N.Murdoch RNZAF KIA
    P/O W.K.Hayne RAAF KIA
    Sgt W.W.Covey KIA
    Sgt R.Turner KIA
    F/S H.B.McGarrow KIA

    Code
    Lost without trace. All are commemorated on the Runnymede Memorial.  Sgt R.K.Anson          KIA P/O B.N.Murdoch RNZAF  KIA P/O W.K.Hayne RAAF     KIA Sgt W.W.Covey          KIA Sgt R.Turner           KIA F/S H.B.McGarrow       KIA


    Ich benutze im Moment diesen Code:

    [autoit]

    #include <ARRAY.au3>

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

    $ofile = FileOpen("c:\out.txt", 0)
    For $zeile = 1 to 31 Step +1
    $text = FileReadLine($ofile)
    $ergebnis = StringRegExp($text, "(?i)(?x)( F/O | F/S | F/L | P/O | W/O | G/C | P/P | W/C | S/L | WO1 | WO2 | AC1 | AC2 | SGT | LAC | CPL )((.){1,30})( KIA | POW | EVD | INJ )|( F/O | F/S | F/L | P/O | W/O | G/C | P/P | W/C | S/L | WO1 | WO2 | AC1 | AC2 | SGT | LAC | CPL )((.){1,20})(?: F/O | F/S | F/L | P/O | W/O | G/C | P/P | W/C | S/L | WO1 | WO2 | AC1 | AC2 | SGT | LAC | CPL )", 3)
    _ArrayDisplay($ergebnis, "StringRegExp Results")
    Next
    FileClose($ofile)

    [/autoit]


    In der ersten Zeile nimmt er nur jeden 2. Namen:


    Die 2. Zeile gibt er schon fast so aus wie ich es haben will. Auch schon schön getrennt.


    Würde mich freuen wenn mir einer helfen könnte.

    Gruß
    Steffen

  • Wie währs damit?

    [autoit]

    StringRegExp($sText, '[A-Z].{2} +[A-Z]\.[^ ]{5,}', 3)

    [/autoit]


    Es werden aber auch sachen doppelt gefunden also musst du ein _Array_Unique drüber laufen lassen.

  • Vielen Dank für Deine Antwort.

    Das klappt ja schon sehr gut, Danke.

    Aber wie bekommt ich jetzt noch die KIA | POW | EVD | INJ hinter den Namen in das Array? Aber sie stehen nicht immer dahinter wie man an Zeile 1 sieht :S

    Gruß
    Steffen

  • Ungetestet

    [autoit]

    StringRegExp($sText, '[A-Z].{2} +[A-Z]\.[^ ]{5,} +?[A-Z]{0,5}', 3)

    [/autoit]