Reguläre Ausdrücke in C#: Grundlagen der Arbeit mit der Regex-Klasse
Reguläre Ausdrücke (regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren, Ersetzen und Überprüfen von Zeichenfolgen anhand eines vorgegebenen Musters. In C# (.NET) ist die gesamte Arbeit mit regulären Ausdrücken im Namensraum System.Text.RegularExpressions und der zentralen Klasse Regex konzentriert. In diesem Artikel werden wir die grundlegenden und fortgeschrittenen Möglichkeiten regulärer Ausdrücke in C# anhand praktischer Beispiele erläutern.
1. Die Regex-Klasse: grundlegende Methoden und Erstellung von Mustern
Um mit regulären Ausdrücken in C# zu arbeiten, müssen Sie den Namensraum einbinden:
using System.Text.RegularExpressions;Die Klasse Regex bietet mehrere wichtige Methoden:
- IsMatch — prüft, ob eine Zeichenfolge eine Übereinstimmung mit dem Muster enthält.
- Match — gibt die erste Übereinstimmung zurück.
- Matches — gibt alle Übereinstimmungen zurück.
- Replace — ersetzt gefundene Übereinstimmungen durch die angegebene Zeichenfolge.
- Split — teilt eine Zeichenfolge anhand der Übereinstimmungen auf.
Ein einfaches Beispiel zur Überprüfung einer E-Mail-Adresse:
string email = "user@example.com";string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w+$";bool isValid = Regex.IsMatch(email, pattern);Console.WriteLine(isValid); // TrueBeachten Sie das Zeichen @ vor der Zeichenfolge – es handelt sich um eine verbatim-Zeichenfolge (verbatim string), die das Schreiben von Backslashes (\\) in Mustern vereinfacht.
2. Suchen und Extrahieren von Daten: die Methoden Match und Matches
Die Methode Match gibt ein Match-Objekt zurück, das Informationen über die erste Übereinstimmung enthält. Wenn es keine Übereinstimmungen gibt, ist die Eigenschaft Success gleich false.
Beispiel für das Extrahieren einer Telefonnummer aus einem Text:
string text = "Rufen Sie an unter +7 (123) 456-78-90 oder +7 (987) 654-32-10";string pattern = @"\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2}";MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches){ Console.WriteLine(match.Value);}// Ausgabe:// +7 (123) 456-78-90// +7 (987) 654-32-10Die Methode Matches gibt eine Sammlung aller Übereinstimmungen zurück. Sie können auch Erfassungsgruppen verwenden, um einzelne Teile zu extrahieren:
string text = "ID: 12345, Preis: 999.99";string pattern = @"Preis:\\s*(\\d+\\.?\\d*)";Match match = Regex.Match(text, pattern);
if (match.Success){ string price = match.Groups[1].Value; Console.WriteLine($"Preis: {price}"); // Preis: 999.99}Erfassungsgruppen werden im Muster durch runde Klammern () gekennzeichnet. Die Gruppe Null ist die gesamte Übereinstimmung, und die Gruppen 1 bis N sind die erfassten Teilzeichenfolgen.
3. Ersetzen und Aufteilen von Zeichenfolgen: Replace und Split
Die Methode Replace ermöglicht das flexible Ersetzen von Übereinstimmungen. Es werden Rückverweise ($1, $2 usw.) zum Einfügen erfasster Gruppen unterstützt.
Beispiel für die Formatierung eines Datums von "YYYY-MM-DD" in "DD.MM.YYYY":
string date = "2025-03-15";string pattern = @"(\\d{4})-(\\d{2})-(\\d{2})";string replacement = "$3.$2.$1";string result = Regex.Replace(date, pattern, replacement);Console.WriteLine(result); // 15.03.2025Die Methode Split teilt eine Zeichenfolge anhand von Übereinstimmungen mit dem Muster auf. Dies ist nützlich zum Parsen von CSV-Daten oder Logs:
string data = "apple;banana;cherry;grape";string pattern = @";";string[] fruits = Regex.Split(data, pattern);foreach (var fruit in fruits){ Console.WriteLine(fruit);}// Ausgabe:// apple// banana// cherry// grapeSie können auch komplexere Trennzeichen verwenden, z. B. mehrere Leerzeichen oder Satzzeichen:
string text = "eins zwei,drei;vier";string[] parts = Regex.Split(