Reguläre Ausdrücke in C#: Vollständige Anleitung für Anfänger
\nRegulä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.
1. Grundlagen der Arbeit mit Regex in C#
\nBinden Sie zunächst den Namespace ein:
\nusing System.Text.RegularExpressions;\nDie 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:
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\nMusteranalyse:
\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
Für wiederholte Aufrufe ist es besser, ein Regex-Objekt zu erstellen, um eine erneute Kompilierung des Musters zu vermeiden:
Regex emailRegex = new Regex(@"\\w+@\\w+\\.\\w+");\nConsole.WriteLine(emailRegex.IsMatch("admin@site.de")); // True\n\n2. Suche nach allen Übereinstimmungen: Match und MatchCollection
\nDie 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.
Beispiel: Extrahieren aller Zahlen aus einer Zeichenkette
\nstring 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\nArbeiten 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:
\nstring 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}\nGruppen werden ab 1 nummeriert (Gruppe 0 ist die gesamte Übereinstimmung). Benannte Gruppen sind lesbarer:
\nstring namedPattern = @"(?<day>\\d{2})\\.(?<month>\\d{2})\\.(?<year>\\d{4})";\nmatch = Regex.Match(input, namedPattern);\nConsole.WriteLine(match.Groups["day"].Value); // 25\n\n3. Erweiterte Möglichkeiten: Ersetzungen und Optionen
\nTextersetzung mit Regex.Replace. Ermöglicht nicht nur das Löschen oder Ersetzen einer Teilzeichenkette, sondern auch die Verwendung von Gruppen in der Ersetzungszeichenkette:
\nstring 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\nWichtige Optionen (RegexOptions):
\n- \n