none
RegEx; Brauche ein bisschen Hilfe zu RegEx, weil noch nie selbst verwendet RRS feed

  • Frage

  • Hallo zusammen,

    ich benötige mal ein bisschen Hilfe zu RegEx, das ich bisher noch nicht verwendet habe.

    Folgendes Problem:
    In einem RTF.Text befinden sich mehrere Teilstrings der Form:
    \red0\green0\blue255 oder \red255\green255\blue255 oder ähnliche.
    Ich möchte nun in einer Schleife alle solcher Strings herauslesen und in einem Array speichern, weiß aber nicht, wie ich das realisieren kann.

    Für Codierungshinweise bin ich sehr dankbar.

    Grüße-


    Dietrich

    Dienstag, 11. Februar 2020 15:10

Antworten

  • Hallo Dietrich,

    bspw. so:

    Dim Source As String = "Start \red0\green0\blue255 Mitte \red255\green255\blue255 Ende."
    
        For Each Item As Match In Regex.Matches( Source, "\\red\d{1,3}\\green\d{1,3}\\blue\d{1,3}" )
            TextBox1.AppendText( Item.Value & ControlChars.NewLine )
        Next

    \\ muss im Suchpattern sein, da \ ein Kontrollzeichen ist.

    Für die weiteren Sachen siehe bspw.:

      Sprachelemente für reguläre Ausdrücke – Kurzübersicht

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert dherrmann Dienstag, 11. Februar 2020 19:09
    Dienstag, 11. Februar 2020 17:05
    Moderator

Alle Antworten

  • Hallo Dietrich,

    kommen die immer in exakt dieser Reihenfolge vor?

    Also \red<zahl>\green<zahl>\blue<zahl>?

    Oder kann das auch mal anders aussehen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Dienstag, 11. Februar 2020 15:14
    Moderator
  • Genau, immer das gleiche Format. Aber <zahl> kann eben 3-, 2- oder einstellig sein.

    Dietrich

    Dienstag, 11. Februar 2020 15:27
  • Hallo Dietrich,

    bspw. so:

    Dim Source As String = "Start \red0\green0\blue255 Mitte \red255\green255\blue255 Ende."
    
        For Each Item As Match In Regex.Matches( Source, "\\red\d{1,3}\\green\d{1,3}\\blue\d{1,3}" )
            TextBox1.AppendText( Item.Value & ControlChars.NewLine )
        Next

    \\ muss im Suchpattern sein, da \ ein Kontrollzeichen ist.

    Für die weiteren Sachen siehe bspw.:

      Sprachelemente für reguläre Ausdrücke – Kurzübersicht

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert dherrmann Dienstag, 11. Februar 2020 19:09
    Dienstag, 11. Februar 2020 17:05
    Moderator
  • Hallo Dietrich,

    es geht auch ohne RegEx

    Module Program
        Sub Main(args As String())
            Console.WriteLine("Hello World!")
    
            GetColors()
        End Sub
    
        Private Sub GetColors()
            Dim colors As List(Of String) = New List(Of String)() From {
                    "\red0\green0\blue0",
                    "\red10\green01\blue10",
                    "\red200\green200\blue200"
                }
            Dim cl As List(Of Byte()) = New List(Of Byte())()
    
            For Each c In colors
                Dim s = c.Split("\")
                Dim v As String = ""
                Dim color = New Byte(2) {}
                cl.Add(color)
    
                For Each item In s
    
                    If item.Length > 0 Then
    
                        Select Case item(0)
                            Case "r"c
                                v = item.Substring(3, item.Length - 3)
                                color(0) = GetColorByte(v)
                            Case "g"c
                                v = item.Substring(5, item.Length - 5)
                                color(1) = GetColorByte(v)
                            Case "b"c
                                v = item.Substring(4, item.Length - 4)
                                color(2) = GetColorByte(v)
                        End Select
                    End If
                Next
            Next
    
            Dim la = 123
        End Sub
    
        Private Function GetColorByte(ByVal s As String) As Byte
            Dim b As Byte = Nothing
            If Byte.TryParse(s, b) Then Return b
            Return 0
        End Function
    End Module


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings


    Dienstag, 11. Februar 2020 17:07
  • Danke an Stefan und Thomas!

    Stefans Methode habe ich ausprobiert und es fuktioniert prima.

    Grüße-


    Dietrich

    Dienstag, 11. Februar 2020 19:09