Reguläre Ausdrücke in C# mit Beispielen: von der Theorie zur Praxis
\n\nReguläre Ausdrücke (Regex) sind ein mächtiges Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In C# (.NET) wird die Arbeit mit regulären Ausdrücken über den Namensraum System.Text.RegularExpressions und die Klasse Regex realisiert. In diesem Artikel werden wir die wichtigsten Möglichkeiten anhand realer Beispiele durchgehen: von der einfachen Suche bis zur Validierung von E-Mail und Telefon.
1. Grundlagen: die Regex-Klasse und ihre Methoden
\n\nDie Hauptklasse für die Arbeit ist Regex. Sie bietet statische und Instanzmethoden. Hier sind die wichtigsten:
- \n
IsMatch— prüft, ob die Zeichenfolge eine Übereinstimmung mit dem Muster enthält. \nMatch— findet die erste Übereinstimmung. \nMatches— findet alle Übereinstimmungen. \nReplace— ersetzt Übereinstimmungen durch die angegebene Zeichenfolge. \nSplit— teilt die Zeichenfolge nach dem Muster auf. \n
Beispiel 1. Einfache Prüfung
\nusing System;\nusing System.Text.RegularExpressions;\n\nclass Program\n{\n static void Main()\n {\n string text = "Hallo, meine Nummer: 123-456-7890";\n string pattern = @"\\d{3}-\\d{3}-\\d{4}";\n\n if (Regex.IsMatch(text, pattern))\n {\n Console.WriteLine("Nummer gefunden!");\n }\n }\n}\n\n\nIn diesem Beispiel bedeutet \\d{3} „genau drei Ziffern“. Der Backslash wird mit @ (Verbatim-Zeichenfolge) maskiert.
2. Erfassungsgruppen und Datenextraktion
\n\nErfassungsgruppen ermöglichen das Extrahieren von Teilen der Übereinstimmung. Sie werden mit runden Klammern () definiert. Jede Gruppe erhält eine fortlaufende Nummer (beginnend mit 1).
Beispiel 2. Extrahieren von Name und Domain aus einer E-Mail
\nstring email = "user@example.com";\nstring pattern = @"^(\\w+)@(\\w+\\.\\w+)$";\n\nMatch match = Regex.Match(email, pattern);\n\nif (match.Success)\n{\n Console.WriteLine($"Login: {match.Groups[1].Value}"); // user\n Console.WriteLine($"Domain: {match.Groups[2].Value}"); // example.com\n}\n\n\nHier erfasst (\\w+) ein oder mehr alphanumerische Zeichen. ^ und $ sind die Anker für Zeilenanfang und -ende.
Beispiel 3. URL-Analyse
\nstring url = "https://pythonlib.ru/page?id=42";\nstring pattern = @"^(https?)://([^/]+)(/.*)?$";\n\nMatch m = Regex.Match(url, pattern);\nif (m.Success)\n{\n Console.WriteLine($"Protokoll: {m.Groups[1].Value}"); // https\n Console.WriteLine($"Domain: {m.Groups[2].Value}"); // pythonlib.ru\n Console.WriteLine($"Pfad: {m.Groups[3].Value}"); // /page?id=42\n}\n\n\n3. Ersetzen und Löschen von Text
\n\nDie Methode Replace ermöglicht das Ersetzen gefundener Textteile. Man kann Rückverweise wie $1, $2 zum Einfügen von Gruppen verwenden.
Beispiel 4. Formatierung einer Telefonnummer
\nstring raw = "89161234567";\nstring pattern = @"(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})";\nstring replacement = "+7 ($2) $3-$4-$5";\n\nstring formatted = Regex.Replace(raw, pattern, replacement);\nConsole.WriteLine(formatted); // +7 (916) 123-45-67\n\n\nBeispiel 5. Entfernen überflüssiger Leerzeichen
\nstring text = "Dies ist ein Text mit überflüssigen Leerzeichen.";\nstring cleaned = Regex.Replace(text, @"\\s+", " ");\nConsole.WriteLine(cleaned); // "Dies ist ein Text mit überflüssigen Leerzeichen."\n\n\n\\s+ — ein oder mehr Leerzeichen. Ersetzen durch ein einzelnes Leerzeichen.
4. Reale Anwendungsfälle: Validierung von E-Mail und Telefon
\n\nIn der Praxis werden reguläre Ausdrücke am häufigsten zur Überprüfung von Benutzereingaben verwendet. Hier sind zwei typische Beispiele.
\n\nE-Mail-Prüfung (vereinfacht)
\npublic static bool IsValidEmail(string email)\n{\n if (string.IsNullOrWhiteSpace(email))\n return false;\