Regex

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von MasterQ.

    Moinsen,

    ich werde noch kirre mit diesen regulären Ausdrücken.

    Ich habe einen String, der wie folgt aufgebaut ist (Zahl1,Zahl2). Wie extrahiere ich jetzt beide Zahlen (doubles)?

    Am Beispiel (12.34,56.78) versuche ich mich schon ne Weile

    Mit dem Pattern ​(\d+.\d+) erhalte ich ​12.34 zweimal. Ich kapier nicht wieso!

    mit dem Pattern ​\d+.\d+ finde ich nur die erste Zahl, soll heißen es gibt nur einen Eintrag in Match.Groups.

    Ich blicks nicht

    Gruß

    MQ

    MasterQ schrieb:

    Wie extrahiere ich jetzt beide Zahlen (doubles)?
    Doubles kannste nich extrahieren, sondern nur Teilstrings.
    Wenn die Strings immer gleich aufgebaut sind, kannst Du auch mit Split arbeiten:

    VB.NET-Quellcode

    1. Dim str = "(12.34,56.78)"
    2. Dim parts() = str.Split(New Char() {"("c, ")"c, ","c}, StringSplitOptions.RemoveEmptyEntries)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das . solltest du escapen, damit es als Zeichen gewertet wird. -> \.
    Damit ergibt sich das Pattern \d+\.\d+. Dies geht, voraussetzt die Zahlen haben immer Dezimalstellen.
    Falls nicht geht es mit diesem Pattern\d+(\.\d+)?

    VB.NET-Quellcode

    1. Dim sourcestring As String = "(12.34,56.78)"
    2. Dim re As Regex = New Regex("\d+\.\d+")
    3. 'Dim re As Regex = New Regex("\d+(\.\d+)?")
    4. Dim mc As MatchCollection = re.Matches(sourcestring)
    5. Dim mIdx As Integer = 0
    6. For Each m As Match In mc
    7. Console.WriteLine("[{0}]] = {1}", mIdx, m.Value)
    8. mIdx += 1
    9. Next