Reguläre Ausdrücke in C# mit Beispielen für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Reguläre Ausdrücke in C#: Vollständige Anleitung für Anfänger

\n

Reguläre Ausdrücke (regular expressions, regex) sind ein leistungsstarkes Werkzeug zum Suchen, Ersetzen und Überprüfen von Zeichenketten anhand eines vorgegebenen Musters. In C# (.NET) wird die Arbeit mit regulären Ausdrücken über den Namespace System.Text.RegularExpressions realisiert. Dieser Artikel hilft Ihnen, die Grundlagen zu erlernen: von der Erstellung einfachster Muster bis zur Nutzung aller Möglichkeiten der Klasse Regex.

\n\n

1. Grundlagen der Arbeit mit Regex in C#

\n

Binden Sie zunächst den Namespace ein:

\n
using System.Text.RegularExpressions;
\n

Die Klasse Regex bietet statische und Instanzmethoden. Die einfachste Möglichkeit zu prüfen, ob eine Zeichenkette eine Teilzeichenkette nach einem Muster enthält, ist die Methode IsMatch:

\n
string text = "Hallo, meine E-Mail: test@example.com";\nstring pattern = @"\\w+@\\w+\\.\\w+"; // einfaches E-Mail-Muster\n\nbool hasEmail = Regex.IsMatch(text, pattern);\nConsole.WriteLine(hasEmail); // True
\n

Musteranalyse:

\n
    \n
  • \\w+ — ein oder mehrere Buchstaben, Ziffern oder Unterstriche
  • \n
  • @ — das „Klammeraffe"-Zeichen
  • \n
  • \\. — maskierter Punkt (ohne Maskierung bedeutet der Punkt „beliebiges Zeichen")
  • \n
\n

Für wiederholte Aufrufe ist es besser, ein Regex-Objekt zu erstellen, um eine erneute Kompilierung des Musters zu vermeiden:

\n
Regex emailRegex = new Regex(@"\\w+@\\w+\\.\\w+");\nConsole.WriteLine(emailRegex.IsMatch("admin@site.de")); // True
\n\n

2. Suche nach allen Übereinstimmungen: Match und MatchCollection

\n

Die Methode Match gibt die erste Übereinstimmung zurück, Matches alle Übereinstimmungen als Sammlung MatchCollection. Jedes Match-Objekt enthält Informationen über die gefundene Teilzeichenkette, ihre Position und Länge.

\n

Beispiel: Extrahieren aller Zahlen aus einer Zeichenkette

\n
string data = "Im Jahr 2023 gab es 15 Ereignisse, im Jahr 2024 bereits 23.";\nstring numberPattern = @"\\d+"; // eine oder mehrere Ziffern\n\nMatchCollection matches = Regex.Matches(data, numberPattern);\n\nforeach (Match match in matches)\n{\n    Console.WriteLine($"Gefunden: {match.Value} an Position {match.Index}");\n}\n// Ausgabe:\n// Gefunden: 2023 an Position 7\n// Gefunden: 15 an Position 26\n// Gefunden: 2024 an Position 41\n// Gefunden: 23 an Position 55
\n

Arbeiten mit Gruppen (Group). Gruppen ermöglichen das Extrahieren von Teilen einer Übereinstimmung. Bei der Suche nach einem Datum im Format „TT.MM.JJJJ" können Sie beispielsweise Tag, Monat und Jahr separat erhalten:

\n
string input = "Heute ist der 25.12.2024";\nstring datePattern = @"(\\d{2})\\.(\\d{2})\\.(\\d{4})";\n\nMatch match = Regex.Match(input, datePattern);\nif (match.Success)\n{\n    Console.WriteLine($"Tag: {match.Groups[1].Value}");   // 25\n    Console.WriteLine($"Monat: {match.Groups[2].Value}");  // 12\n    Console.WriteLine($"Jahr: {match.Groups[3].Value}");    // 2024\n}
\n

Gruppen werden ab 1 nummeriert (Gruppe 0 ist die gesamte Übereinstimmung). Benannte Gruppen sind lesbarer:

\n
string namedPattern = @"(?<day>\\d{2})\\.(?<month>\\d{2})\\.(?<year>\\d{4})";\nmatch = Regex.Match(input, namedPattern);\nConsole.WriteLine(match.Groups["day"].Value);   // 25
\n\n

3. Erweiterte Möglichkeiten: Ersetzungen und Optionen

\n

Textersetzung mit Regex.Replace. Ermöglicht nicht nur das Löschen oder Ersetzen einer Teilzeichenkette, sondern auch die Verwendung von Gruppen in der Ersetzungszeichenkette:

\n
string phone = "+7 (123) 456-78-90";\n// Alles außer Ziffern entfernen\nstring clean = Regex.Replace(phone, @"[^\\d]", "");\nConsole.WriteLine(clean); // 71234567890\n\n// Format ändern: (123) 456-78-90 → 123-456-7890\nstring formatted = Regex.Replace(phone, \n    @"\\((\\d{3})\\)\\s*(\\d{3})-(\\d{2})-(\\d{2})",\n    "$1-$2-$3$4");\nConsole.WriteLine(formatted); // 123-456-7890
\n

Wichtige Optionen (RegexOptions):

\n
    \n

Blogs

Buchempfehlungen