RegEx alle außer...?

  • Hallo,

    eine Frage an die RegEx Profis.
    Wie kann man ein Ergebnis anzeigen: z.B. alle außer...

    Test:
    Bitte in die Zischenablage kopieren

    Spoiler anzeigen


    ;-Das ist - der [erste]Text-
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

    Mein Code:
    Hier werden alle .de .fr angezeigt!

    [autoit]


    #include <Array.au3>

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

    $HTML = Clipget()

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

    $aResult = StringRegExp($HTML,'-(.*?[.de|.fr])-',3)
    _Arraydisplay($aResult)

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

    exit

    [/autoit]

    Wie kann man alle anzeigen außer .de .fr ?

    Liebe Grüße
    Ilse :(

  • Hallo Schnitzel,

    genau so..., hatte auch schon mit ^ probiert
    leider ohne Erfolg.

    Noch ne Frage an dich:
    Wenn ich im Ergebnis z.B. die [] nicht anzeigen möchte
    kann man die auch herausfiltern, also ohne m. RegexReplace...??

    Die Zwischenablage

    Spoiler anzeigen


    ;-Das ist der [erste]Text-
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

    Also:
    Das ist der [erste]Text sollte so aussehen: Das ist der erste Text (ohne Klammern)
    ^[ geht nicht

    Mein Code

    [autoit]


    #include <Array.au3>

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

    ;Bitte in Zwischenablage kopieren

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

    ;-Das ist der [erste]Text-
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

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

    $HTML = Clipget()

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

    ;$aResult = StringRegExp($HTML,'-(.*?[^\]])-',3)

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

    $aResult = StringRegExp($HTML,'-(.*?[^[]])-',3); das geht leider nicht!
    _Arraydisplay($aResult)

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

    exit

    [/autoit]


    Liebe Grüße
    Ilse ;)

  • Hallo Bugfix,

    das hatte ich schon probiert,
    aber das geht nicht!

    [autoit]


    #include <Array.au3>

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

    ;Bitte in Zwischenablage kopieren

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

    ;-Das ist der [erste]Text-
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

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

    $HTML = Clipget()

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

    ;$aResult = StringRegExp($HTML,'-(.*?[^.de|.fr|\[\]])-',3)

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

    $aResult = StringRegExp($HTML,'-(.*?[^\[|^\]])-',3)
    _Arraydisplay($aResult)

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

    exit

    [/autoit]

    also nicht anzeigen: [^\[|^\]]

    was mache ich da falsch?

    Grüße
    Ilse :(

    • Offizieller Beitrag

    Was soll die Pipe im Set?
    mit [XYZ] bildest du ein Set, das nach dem enthaltenen Pattern sucht. Mit "[^\[\]]" hast du ein negierendes Set, d.h. du bekommst alles ausser den im Set angegebenen Zeichen. Quantifier kannst du selber anhängen, wenn du nicht jedes Zeichen einzeln haben willst.

  • Hallo Bugfix,

    ich bin noch immer am probieren.

    Zitat


    Mit "[^\[\]]" hast du ein negierendes Set, d.h. du bekommst alles ausser den im Set angegebenen Zeichen


    Die im Set angegebenen Zeichen möchte ich nicht haben. []

    Mein Quelltext:
    -Das ist der [erste]Text-
    Das Ergebnis sollte sein:
    Das ist der erste Text

    [autoit]


    $aResult = StringRegExp($HTML,'-(.*?[^\[|^\]])-',3)

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

    ; das bedeutet doch: zeige mir alles ausser [] oder nicht?

    [/autoit]


    Ich krieg's irgendwie nicht hin

    :( Ilse

  • Hi,
    ja, man kann sich mit den Regexen Stunden- Tage- und Wochenlang beschäftigen.
    Allerdings frage ich mich manchmal, wieso man auch nur einen Gedanken an ein Regex verschwendet, wenn die "Standard"-Stringfunktionen das Problem in 3 Sekunden abwatschen....
    Wenn ich keine [ im Text haben möchte, dann benutze ich

    [autoit]

    stringreplace($text,"[","")

    [/autoit]

    .
    Ja, ggf, muss man 5 Zeilen schreiben und erreicht dasselbe Ergebnis wie ein Regex. Das dauert aber keinesfalls länger (jedenfalls bei mir, "komplizierte" Probleme teile ich in mehrer einfache auf).
    Wenn man täglich Textfilter benutzt, sind Regex eine klasse Sache, unbestritten.
    Aber für "pillepalle" Probleme bevorzuge ich pillepalle Lösungen. ;)

    • Offizieller Beitrag

    Und wenn du Antworten auf deine Fragen bekommst, solltest du diese lesen und auch testen.
    Dann hättest du gemerkt, dass mein Pattern die eckigen Klammern nicht zurückgibt. Und nochmal: Eine Pipe im Set - was soll das? Ein Set setzt ein ODER für alle im Set enthaltenen Zeichen, das ist ja dessen Sinn. Deshalb ist es genauso unsinnig zweimal eine Negation "^" zu setzen.
    Setze dich bitte gründlich mit der Hilfe auseinander, das bringt dich am Besten voran.

    Im übrigen stimme ich Andy zu: In AutoIt solltest du RegExp nur dann einsetzen, wenn es dir einen Vorteil gegenüber String-Funktionen verschafft.

  • Andy,

    merci für deinen Rat.
    Werde ihn in Zukunft befolgen.
    Aber wie du bereits geschrieben hast:

    Zitat


    Wenn man täglich Textfilter benutzt, sind Regex eine klasse Sache, unbestritten.

    und genau das ist mein Problem. Deßhalb will ich mich reinknien.

    BugFix ,

    das habe ich alles gelesen und "getestet....und Tutorials gelesen, probiert...
    ABER: dein Code funktioniert bei mir nicht!

    Hier nochmal der Code mit deinen Zeilen:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    ;Bitte in Zwischenablage kopieren

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

    ;-Das ist der [erste]Text- ; das sind die Klammern um die es geht!
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

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

    $HTML = Clipget()

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

    ;$aResult = StringRegExp($HTML,'-(.*?[^\[\]])-',3); ohne oder
    $aResult = StringRegExp($HTML,'-(.*?[^\[|\]])-',3); mit oder
    _Arraydisplay($aResult)

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

    exit

    [/autoit]

    Ich erhalte ein Ergebnis.
    Deinen Tipp kann ich nicht nachvollziehen.

    Zitat


    Dann hättest du gemerkt, dass mein Pattern die eckigen Klammern nicht zurückgibt.

    ...aber die sind im ersten Satz immer noch drin. Trotz einem Pipe. Wieso?
    Würde mich freuen wenn du mir eine kpl. Zeile postest die funktioniert

    Ich will's einfach nur verstehen!


    Liebe Grüße
    Ilse

  • Hi,

    Zitat von Ilse

    ...aber die sind im ersten Satz immer noch drin. Trotz einem Pipe. Wieso?

    Weil das Pipe drin ist....s. Bugfixens Post, er schrieb eindeutig

    Zitat von Bugfix

    Mit "[^\[\]]" hast du ein negierendes Set, d.h. du bekommst alles ausser den im Set angegebenen Zeichen.

    Wieso nimmst du nicht diesen Pattern?

  • Hi Andy,

    dieses Pattern geht nicht!

    1. Ich kopiere alles in die Zwischenablage

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    ;Bitte in Zwischenablage kopieren

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

    ;-Das ist der [erste]Text-
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

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

    $HTML = Clipget()
    $aResult = StringRegExp($HTML,"[^\[\]]",-3); mit oder
    _Arraydisplay($aResult)

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

    exit

    [/autoit]

    Diese Version geht nicht.

    ...diese auch nicht!

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    ;Bitte in Zwischenablage kopieren

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

    ;-Das ist der [erste]Text-
    ;-Das ist der 35. Text-
    ;-Das ist ein deutscher Text.de-
    ;-Das ist ein französicher Text.fr-

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

    $HTML = Clipget()

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

    $aResult = StringRegExp($HTML,'-(.*?[^\[\]])-',3);

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

    _Arraydisplay($aResult)

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

    exit

    [/autoit]

    Kannst du mir diese Zeile mal verbessern?

    $aResult = StringRegExp($HTML,'-(.*?[^\[\]])-',3);

    damit ich dieses Ergebnis erhalte?

    Spoiler anzeigen


    Das ist der ersteText-
    Das ist der 35. Text-
    Das ist ein deutscher Text.de-
    Das ist ein französicher Text.fr-

    oder verstehe ich das was mit den "Pipes"??? falsch (^)?

    Liebe Grüße
    Ilse ;)