Regex mit Absätzen

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von xpecidy.

    Regex mit Absätzen

    Hallo Leute,

    ich habe mir jetzt schon einiges zu RegEx durchgelesen komme aber mit einem Problemchen nicht weiter.

    Ich möchte gerne sämtlichen Text, welcher zwischen "[" und "]" steht. Das ganze auch Absatzweise.

    Mein Befehl bisher:

    VB.NET-Quellcode

    1. \[.*?\]|\[.*\n.*?\]


    Was aber nur klappt, wenn der Text in einer Zeile zwischen "[" "]" steht, oder wenn nur EIN Absatz dazwischen ist. Wie formuliere ich den Ausdruck so, dass keiner bis x Absätze durchsucht werden sollen? Analog zum "*" also kein oder mehr Absätze...

    Danke für die Hilfe! ;( :D
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    da bin ich auch mal auf die Antworten gespannt.
    Ich werde dieses vermaledeite Regex NIEEEEE und Niemals nich verstehen !
    (bin wohl zu alt dafür).
    Ich gebs ja ungern zu, aber dies Ist für mich mehr als nur ein böhmisches Dort !
    ...und wird es wohl auch immer bleiben
    Hallo ihr zwei,

    @Higlav
    danke für die schnelle Hilfe. Ich habe deinen Vorschlag so interpretiert:

    VB.NET-Quellcode

    1. \[.*(.|\n)+?\]


    Das klappt aber auch nicht tadellos:

    [test]

    ich bin [mehrzeilig
    x
    x
    ]
    test

    [asdf]

    wird mir zum Beispiel ausgegeben, obwohl der Text "ich bin " in der 3. Zeile nicht benötigt wird. :-/
    Was mach ich falsch? :)

    @RoulettePilot
    man ist nie zu alt! Mich hat es am Anfang auch sehr abgeschreckt und es schien unerreichbar.
    Auf der Seite regexpal.com/ hab ich viel rumprobiert und getestet - ist echt super! :) Stück für Stück wird es besser! :)
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:
    Ja, du hast meinen Vorschlag ein wenig flasch interpretiert. ;) Das hier funktioniert 100%: (?<=\[)(.|\n)*?(?=\]) Damit wird auch nur der Text zwischen den eckigen Brackets gefunden(auch wenn keiner vorhanden wäre - falls nur gefunden werden sollte, wenn es mind. ein Zeichne enthält: * durch + ersetzen).

    EDIT: Nutze EDR's RegexTester. Der ist voll funktionsfähig. Regexpal ist eingeschränkt, da es Grouping und teilweise auch Lookbehinds/Lookaheads nicht unterstützt. Das liegt daran, dass es zwei(verschiedene) Regexe gibt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Higlav“ ()

    @Higlav
    Jetzt hats *klick* gemacht, sodass ich sogar umbauen konnte, dass die eckigen klammern mit ausgelesen/ausgegeben werden (die brauch ich nämlich auch). :)

    VB.NET-Quellcode

    1. \[(.|\n)*?\]

    Hätte ich eigentlich selber drauf kommen müssen. Der Wert in Klammer bedeutet entweder ein beliebiges Zeichen oder einen Zeilenumbruch und der Stern dahinter eben "beliebig oft" bis EIN Zeichen "]" ist.

    Suuuper! :) Vielen Dank!

    *edit*
    Danke @Higlav , den Link hab ich mir mal in die Favoriten gespeichert! ;)
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xpecidy“ ()

    Kein Problem. Vielleicht noch zur Ergänzung: Wenn du die Match-Funktion aufrufst, kannst du noch optionale Optionen( :whistling: ) als Parameter angeben(und evtl. mit Or verknüpfen):

    VB.NET-Quellcode

    1. Dim m = Regex.Match(MyText, MyPattern, RegexOptions.SingleLine)

    Dann brauchst du kein (.|\n) mehr, sondern kannst auch nur . schreiben.

    Higlav schrieb:

    optionale Optionen( )
    :thumbsup:

    Tatsächlich benötige ich den Befehl für eine Oracle-Sql-Abfrage.. wollte aber dem Forum treu bleiben! :whistling:
    Dennoch vielen Dank für den Hinweis! :)
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!: