Laden...

RegEx geklammerten Bereich wiederholen

9 Antworten
1,551 Aufrufe
Letzter Beitrag: vor 2 Jahren
RegEx geklammerten Bereich wiederholen

Hallo!

Man hätte es viel schneller ausprogrogrammiert, aber ... irgendwann verstehe ich auch noch RegEx.

Ich möchte aus einnem Text alle Jahreszahlen (im Bereich von 18xx ... 20xx) extrahieren.

Wenn der Text z.B. "ab1998ist 2000gg1898" lautet , dann müsste ich 3 Treffer für 1998, 2000 und 1898 erhalten.

Einen Treffer erhalte ich durch:

(?:(?:18|19|20)[0-9]{2})

Wie sage ich aber "RegEx" das er alle Treffer findet?

Erster Treffer:
(?:(?:18|19|20)[0-9]{2})


Letzter Treffer:
(?:(?:18|19|20)[0-9]{2})*$

(Soll mit 18, 19, oder 20 beginnen und dann 2 Ziffern folgen) *   funktioniert so nicht.

Die Jahreszahlen können auch unmittelbar innerhalb eines Wortes eingeschlossen sein!

In dem Text stehen auch andere Zahlen mit mehr oder weniger Stellen, die nicht erfasst werden sollen.

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

Dein Regex funktioniert bei mir:

using System;
using System.Text.RegularExpressions;
    
public class Program
{
    public static void Main()
    { 
        string input = "ab1998ist 2000gg1898";
        var regex = new Regex("(?:(?:18|19|20)[0-9]{2})");
        var matches = regex.Matches(input);
        foreach(var match in matches)
        {
            Console.WriteLine(match);
        }
    }
}

Ausgabe:

1998
2000
1898

Hallo dannoe!

Das ist ja der Hammer! Ich habe das "nur" mit dem hier im Forum entwickelten regexlab getestet und da wird nur ein Treffer angezeigt (Siehe Bild).

Da ich im Moment nicht an ein VS komme kann ich es ad hoc nicht nachvollziehen, aber ich bin mir sicher, dass deine Prüfung richtig ist!

Vielen Dank!!!

Hallo Wilfried!

Danke für deine Links.

Es gibt unzählige Webseiten mit denen man Reguläre Ausdrücke testen kann, z. B. auch https://regex101.com/.
Verwende ich gerne, da man sich damit direkt ein Codeschnipsel in C# generieren kann.

Und um kurze C# Codeschnipsel zu testen kannst du z. B. https://dotnetfiddle.net/ oder https://sharplab.io/ verwenden.

Das ist in RegExLab aber sehr versteckt! Es könnte sich ja wenigstens die Hintergrundfarbe ändern, wenn es mehere Treffer gibt.

Durch "scrollen" der Pattern-Zeile werden die weiteren Ergebnisse angezeigt und diese erhalten dann auch eine andere Hintergrundfarbe (siehe Bild).

Sorry.

Zitat von perlfred

Das ist in RegExLab aber sehr versteckt!

Der ist auch hundert Jahre alt...

Hallo dannoe

Das es da einige gibt, ist mir bewußt, habe lieber etwas lokales benutzt. Deine Seite sieht aber wirklich sehr gut aus!

Nochmals vielen Dank!!!