Pattern für Zahlenbereich

  • VB.NET

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

    Pattern für Zahlenbereich

    Hallo.


    Ich habe ein Problem.
    Das Problem habe ich jetzt mal versucht vom Grundgerüst so einfach wie möglich zu erläutern,
    aber eigentlich ist es weitaus komplizierter.


    Ich suche ein Pattern, mit dem man einen Zahlenbereich abdecken kann.

    Situation:

    -Input von zwei Zahlen im Wertebereich von 14-90 ( handelt sich um Alter ).
    Beispielinput:
    27 , 36



    Jetzt sollen die Werte 27,28,29,30,31,32,33,34,35,36 erlaubt sein.

    Z.b sieht der String so aus:


    Alter:x

    x stellt die Zahl dar.


    Kann man das mit einem Regexpattern irgendwie hinbekommen?

    HINWEIS: Mir ist klar, dass das Problem für die meisten mit dem
    Pattern

    VB.NET-Quellcode

    1. Alter:(\d{2,2})
    schon gelöst wäre.

    Denn so könnte man dann die Matches vergleichen indem man auf .Groups(1).Value zugreift.

    Genau diesen Vergleich der Matches möchte ich aber aus Effizienzgründen unterbinden.

    Das heißt, ich suche ein Pattern, damit ich eben nicht vergleichen muss, sondern
    nur die Matches habe, die im Wertebereich liegen.
    Jetz mal ausm Kopf:

    Du kannst die Differenz der Zahlen berechnen und dann ein Pattern erstellen, dass
    die Zahlen einfach aneinanderreiht und prüft?

    Wo sollen die Werte denn erlaubt sein? Und was ist nun das Alter? Der Input oder was anderes?

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    das geht eher nicht.
    Regex ist Textverarbeitung - damit kannman nicht rechnen (genauer: du kannst keinen Pattern formulieren, der numerische Vergleiche anstellt).
    vlt. lässt sich ein komplizierter Regex finden - wie findste "27|28|29|30|31|32|33|34|35|37"?
    Aber komplexe Regexe sind u.U. erst recht unperformant.
    So funktionierts auf jeden Fall:

    VB.NET-Quellcode

    1. MessageBox.Show(Regex.Match("Alter:90", "(?<=Alter:)1[4-9]|[2-8][0-9]|90").Value)
    . Erklärung: "1[4-9]" ist für ein Alter von 14 - 19, "[2-8][0-9]" matcht alle Werte von 20-89, "90" matcht letztendlich 90. Das gibt dir dann entweder einen leeren String, wenn das Alter nicht passt oder das Alter als String, wenn es in den Bereich passt.