none
Hilfe mit RegEx benötigt RRS feed

  • Frage

  • Hallo zusammen,

    ich versuche zum ersten Mal per RegEx etwas zu suchen. Leider stelle ich mich recht blöd an und im Internet kann ich auch nichts passendes finden.

    Zu meinem Problem:

    Ich würde gerne einen Text auf ein Bestimmtes Wort durchsuchen und die anschließenden Zahlen vergleichen. Hier im konkreten Beispiel möchte ich nach “Delay=“ suchen und die anschließende Zahl vergleichen. Es sollen z.B. alle Wert über 100ms ausgegeben werden.

        Text "Q40|Uf @A-P81 B-P160"

        SI "25mA DC=1.000 VMax=4 V Delay=10mS MV=0.750V Tol=+-20 A=(184) B=(81)"

        Text "Q40|Ur @A-P160 B-P81"

        SI "20mA DC=1.000 VMax=4 V Delay=101mS MV=4V Tol=+-20 A=(81) B=(184)"

    Vielen Dank für eure Hilfe

    Freitag, 13. Oktober 2017 14:52

Antworten

  • Hey,

    mit RegEx selbst kannst du nicht Zahlen direkt vergleichen, weil es nur für Strings vorgesehen ist. Das heißt, es gibt kein Pattern, mit dem man nur Zeichenketten mit einem Delay-Wert größer 100 selektiert (zumindest ist mir nichts derartiges bekannt). Folglich musst du die Zahl auswählen, in einen Integer parsen und vergleichen.

    string input = "ABCDEFG Delay=101ms HIJK";
    Match result = Regex.Match(input, @"Delay=(?<delay>\d+)ms", RegexOptions.ExplicitCapture);
    if (result.Success)
    {
        int delay = int.Parse(result.Groups["delay"].Value);
        if (delay > 100) { ... }
    }

    Weil ich nicht weiß, wie ich es auf Deutsch beschreiben soll, bediene ich mich einfach mal der Reference:

    "(?<name> subexpression) captures the matched subexpression into a named group."

    Diese Gruppe hast du dann im Match zur Verfügung und kannst den Wert parsen.

    Beste Grüße

    Update: Wenn du mehrere Werte hast, nimmst du Regex.Matches und verwendest den Code oben für jedes Element der MatchCollection.


    Vergiss nicht, die Antwort auf deine Frage zu markieren und hilfreiche Beiträge zu bewerten, damit auch andere schnell die Lösung für ihr Problem finden können - und wir nebenbei noch ein paar Punkte verdienen. :)

    Samstag, 14. Oktober 2017 18:12