(allg.) Frage zu einem RegEx

  • Hallo zusammen,

    ich habe da eine Frage zum RegEx (irgendwie kapiere ich es nicht)....

    Problem:
    Ich habe ein Textfile in dem ich aus vielen Zeilen im ersten Schritt nur die Zeilen heraussuche die ich benötige.
    Soweit, sogut - das klappt. Das Zwischenergebnis sieht wie folgt aus.

    Bsp.:
    Line 12: "<new_dn person='true'>CN=A0001,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    Line 17: "<new_dn person='true'>CN=B0002,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    Line 22: "<new_dn person='true'>CN=C0003,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    Line 27: "<new_dn person='true'>CN=D0004,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    Line 32: "<new_dn person='true'>CN=E0005,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    Line 37: "<new_dn person='true'>CN=F0006,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"

    Und nun zu meinem Problem:
    Aus jeder dieser Zeilen brauche ich 'nur' den Anteil der zwischen CN= und dem ',' steht (z.B. A0001, ...)
    und zwar ermittelt durch einen RegExpress Ausdruck.

    P.S. Ich weiss das könnte man auch mittels _StringBetween machen, aber in meinem Fall eher unglücklich,
    da ich sonst ziemliche Klimmzüge machen müsste.


    Danke schon einmal im voraus

    mfg
    ugt100

    Einmal editiert, zuletzt von ugt100 (4. Juli 2013 um 15:15)

  • Hallo,

    hier mal ein Beispiel mit StringRegExp:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $text[5], $match[5]
    Global $temp

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

    $text[0] = "<new_dn person='true'>CN=A0001,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    $text[1] = "<new_dn person='true'>CN=B0002,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    $text[2] = "<new_dn person='true'>CN=C0003,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    $text[3] = "<new_dn person='true'>CN=D0004,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"
    $text[4] = "<new_dn person='true'>CN=E0005,ou=user,ou=YYYYYY,o=ZZZZZ,c=DE</new_dn>"

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

    For $i = 0 To UBound($text)-1
    If StringRegExp ($text[$i], "CN=.{5},", 0) Then
    $temp = StringRegExp ($text[$i], "CN=(.{5}),", 3)
    ; Erklärung: CN= -> Start des Ausdrucks .{5} -> 5 beliebige Zeichen Die Klammern: (.{5}) -> das Ergebnis markieren
    $match[$i] = $temp[0]
    EndIf
    Next
    _ArrayDisplay ($match)

    [/autoit]

    Aber ich würde es mit _StringBetween () machen.
    Ich verstehe nicht, was du mit

    aber in meinem Fall eher unglücklich,
    da ich sonst ziemliche Klimmzüge machen müsste.


    meinst.

    MfG Xenon

    2 Mal editiert, zuletzt von Xenon (4. Juli 2013 um 14:30)

  • Hi Xenon,

    danke für die Hilfe - jetzt wo ich den Suchstring sehe, ist es ganz einfach.
    Warum 'Klimmzüge' - ich werde den String noch zweien unserer 'HelpDesk' Kollegen geben,
    damit sie, wenn gebraucht, es auch z.B. im Notepad++ nutzen können.
    Die können dann Fragen dadurch beantworten.

    Die Anwendung die ich nutzen will, steht Ihnen nicht zur Verfügung (Organisatorische Vorgaben :( )

    DANKE
    mfg
    ugt100 :thumbup:

  • ich werde den String noch zweien unserer 'HelpDesk' Kollegen geben,
    damit sie, wenn gebraucht, es auch z.B. im Notepad++ nutzen können.

    Aber Achtung! - RegEx ist nicht gleich RegEx es gibt einige verschiedene RegEx-Parser die sich in der verwendeten Syntax unterscheiden. Daher kann es gut sein, dass ein Pattern zwar in Autoit funktioniert, aber in Notepad++ nur Quak liefert... ;)

    LG
    Christoph :)