Regex Replace

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von nafets3646.

    Regex Replace

    Hallo,

    Ich hab nen Text in ner TextBox mit nem BBCode
    also z.B. :

    Quellcode

    1. Das ist ein [b]neuer[/b] Text.


    Ich möchte die [ b] und [/ b] rausfiltern. (extra mit leerzeichen sonst wird der Text hier fett)
    Das krieg ich auch hin.

    VB.NET-Quellcode

    1. RichTextBoxOutput.Text = Regex.Replace(TextBoxInput.Text, "\[b\](.+?)\[\/b\]", "")


    Allerdings geht der Text der zwischen den beiden Tags steht verloren.
    Wie kann ich den vorher in ne String Variable laden?
    Also neuer würde ich gerne in ne extra variable laden? :o
    C# Developer
    Learning C++
    Hol dir den Text vorher.

    VB.NET-Quellcode

    1. Dim input As String = "Das ist ein [b]neuer[/b] Text."
    2. MessageBox.Show(New System.Text.RegularExpressions.Regex("\[b\](?<b>(.*?))\[\/b\]").Match(input).Groups("b").Value)
    3. MessageBox.Show(System.Text.RegularExpressions.Regex.Replace(input, "\[b\](.+?)\[\/b\]", "").ToString())

    Musst halt noch dynamisch anpassen.
    Ok, danke das funktioniert.
    Gibt es auch noch eine möglichkeit den Text der zwischen den Tags steht als Fett in ner Richtextbox auszugeben?
    ich habs so probiert, aber net gebacken bekommen:

    VB.NET-Quellcode

    1. RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
    2. Dim startindex = RichTextBox1.Text.IndexOf("DEIN TEXT")


    ?(
    C# Developer
    Learning C++

    VB.NET-Quellcode

    1. RichTextBox1.Text = Regex.Match(input, "(?<=\[b\]).+?(?=\[\/b\])").Value

    edit: Vergesst meinen Vorschlag, hab deine Frage falsch verstanden :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „suscurtl“ ()

    suscurtl schrieb:

    RichTextBox1.Text = Regex.Match(input, "(?<=\[b\]).+?(?=\[\/b\])").Value

    Dadurch wird mir nur ausgegeben was zwischen den Tags steht, nicht aber wird der Text in Fett ausgegeben, also in der Richtextbox?
    C# Developer
    Learning C++
    @Rikudo
    Schau dir mal die RichTextBox.Rtf-Property an. Hier mal ein kleines Beispiel:
    Das, was in den BBCodes steht, soll fett werden. Hier mal ein Beispiel:
    Wenn ich den Text Unfett [b]Fett[/b] eingebe, sieht der Rtf-Code so aus:

    Quellcode

    1. {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
    2. \viewkind4\uc1\pard\f0\fs17 Unfett [b]Fett[/b] Unfett\par
    3. }

    Richtig formatiert und ohne die BBCodes sieht es dann so aus:

    Quellcode

    1. {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
    2. \viewkind4\uc1\pard\f0\fs17 Unfett \b Fett\b0 Unfett\par
    3. }

    Was wir hier sehr gut sehen können ist, dass dieser Konstrukt:

    Quellcode

    1. [b]<fetter Text>[/b]

    zu diesem wird:

    Quellcode

    1. \b <fetter Text>\b0


    Nun können wir also den Rtf-Text ganz einfach Replacen:

    VB.NET-Quellcode

    1. Public Function HighlightBoldBBCode(rtf As String) As String
    2. Return System.Text.RegularExpressions.Regex.Replace(rtf, "\[b\](.*?)\[\/b\]", "\b $1\b0 ")
    3. End Function
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. RichTextBox1.Rtf = HighlightBoldBBCode(RichTextBox1.Rtf)
    6. End Sub
    Sorry, für Off-Topic

    @nafets3646

    Danke für den Hinweis, dass in einem "Replace-String" die Perl-Variablen $1...$n funktionieren. Und ich lese seit Jahren immer erst das Ergebnis aus bevor ich etwas ersetze :wacko:

    Das musste jetzt einfach sein! Wir kann man das Jahrelang so umständlich machen? Ist das erste mal, dass ich das sehe.... :thumbup:
    @Real-TTX
    btw, du kannst denen sogar Namen zuweisen :D:

    VB.NET-Quellcode

    1. Return System.Text.RegularExpressions.Regex.Replace(rtf, "\[b\](?<Text>(.*?))\[\/b\]", "\b ${Text} \b0 ")

    Steht alles hier: msdn.microsoft.com/en-us/library/ewy2t5e0.aspx#Named