Regex für eckige Klammern



  • Hallo zusammen,

    ich muss Texte nach einer bestimmten Art splitten, um diese weiterverarbeiten zu können. Ein Beispieltext könnte sein

    [quote][B]Beispiel: [/B]Aktuelle Einstellung:[COLOR=Red][B]I[/B][/COLOR] Ende der Nachricht
    

    Dabei sollen die eckigen Klammern das Format des Textes angeben. Ich möchte nun mit Regex.Split() folgendes Ergebnis erzeugen:

    [B]
    Beispiel: 
    [/B]
    Aktuelle Einstellung:
    [COLOR=Red]
    [B]
    I
    [/B]
    [/COLOR]
     Ende der Nachricht
    

    Also das die eckigen Klammern in der Ergebnismenge noch mit angegeben werden. Ich hab nun versucht mittels folgendem Pattern dies zu realisieren

    Regex r = new Regex("[\[\\]]");
    

    aber leider werden dabei alle eckigen Klammern nicht mit angegeben.

    Habt ihr eine Lösung dafür?

    Danke!



  • Simple Implementierung ohne Regex:

    string input = "[b]Beispiel: [/b]Aktuelle Einstellung:[color=Red][b]I[/b][/color] Ende der Nachricht";
    input = input.Replace("]", "]\n");
    input = input.Replace("[", "\n[");
    string[] splitted = input.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
    

    Reicht das?

    Regex Lösung:

    string input2 = "[b]Beispiel: [/b]Aktuelle Einstellung:[color=Red][b]I[/b][/color] Ende der Nachricht";
    string[] splitted2 = Regex.Split(input2, @"([.*?])");
    splitted2 = splitted2.Where(x => x != "").ToArray();
    

    Da bin ich mir aber weniger sicher. 😉

    EDIT:
    Sorry das C# Syntax highlighting geht nicht.



  • Suchst du sowas wie

    @"(\[[^\]]*])"
    

    ?


Anmelden zum Antworten