Reguläre Ausdrücke in C# mit Beispielen: in der Praxis
Reguläre Ausdrücke (Regex) sind ein leistungsstarkes Werkzeug zum Suchen, Überprüfen und Ersetzen von Text nach einem Muster. In C# (.NET) wird die Arbeit mit ihnen über die Klasse System.Text.RegularExpressions.Regex realisiert. In diesem Artikel analysieren wir die grundlegenden Möglichkeiten anhand realer Beispiele: von der einfachen E-Mail-Überprüfung bis zur Datenextraktion aus HTML. Alle Beispiele sind bereit zum Kopieren und Verwenden in Ihren Projekten.
Grundlagen der Arbeit mit Regex in C#
Die Klasse Regex bietet drei Schlüsselmethoden:
- IsMatch — prüft, ob die Zeichenfolge dem Muster entspricht;
- Match — findet die erste Übereinstimmung;
- Matches — findet alle Übereinstimmungen.
Ein einfaches Beispiel — prüfen, ob die Zeichenfolge Ziffern enthält:
using System;using System.Text.RegularExpressions;
public class RegexExample{ public static void Main() { string text = "Meine Nummer: 12345"; string pattern = @"\\d+"; // eine oder mehr Ziffern
bool hasDigits = Regex.IsMatch(text, pattern); Console.WriteLine(hasDigits); // True }}Beachten Sie das @ vor der Zeichenfolge — dies ist ein verbatim string literal, das die Maskierung des umgekehrten Schrägstrichs deaktiviert. Ohne dieses müsste man "\\\\d+" schreiben.
E-Mail- und Telefonnummern-Überprüfung
E-Mail-Validierung
Die E-Mail-Überprüfung ist eine klassische Aufgabe. Ein einfaches, aber funktionierendes Muster:
public static bool IsValidEmail(string email){ string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"; return Regex.IsMatch(email, pattern);}
// VerwendungConsole.WriteLine(IsValidEmail("user@example.com")); // TrueConsole.WriteLine(IsValidEmail("user@.com")); // FalseLassen Sie uns das Muster analysieren:
^— Anfang der Zeichenfolge;[a-zA-Z0-9._%+-]+— lokaler Teil (Buchstaben, Ziffern und Sonderzeichen);@— das @-Zeichen;[a-zA-Z0-9.-]+— Domain;\\.— Punkt (maskiert);[a-zA-Z]{2,}— Domain-Endung (mindestens 2 Buchstaben);$— Ende der Zeichenfolge.
Telefonnummern-Überprüfung
Beispiel für das russische Format (+7 XXX XXX-XX-XX):
public static bool IsValidRussianPhone(string phone){ string pattern = @"^\\+7\\d{3}\\d{3}-\\d{2}-\\d{2}$"; // Oder flexiblere Variante: // @"^\\+7[\\s-]?\\d{3}[\\s-]?\\d{3}[\\s-]?\\d{2}[\\s-]?\\d{2}$" return Regex.IsMatch(phone, pattern);}Datenextraktion aus Text mit Erfassungsgruppen
Erfassungsgruppen (Klammern ()) ermöglichen das Extrahieren von Teilen der Übereinstimmung. Zum Beispiel extrahieren wir alle E-Mails aus einem Text:
string text = "Kontakte: support@site.com, admin@test.org, info@company.net";string pattern = @"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\.([a-zA-Z]{2,})";
MatchCollection matches = Regex.Matches(text, pattern);foreach (Match match in matches){ Console.WriteLine($"Vollständige E-Mail: {match.Value}"); Console.WriteLine($"Lokaler Teil: {match.Groups[1].Value}"); Console.WriteLine($"Domain: {match.Groups[2].Value}"); Console.WriteLine($"Endung: {match.Groups[3].Value}"); Console.WriteLine("---");}Ergebnis:
Vollständige E-Mail: support@site.comLokaler Teil: supportDomain: siteEndung: com---Gruppen werden ab 1 nummeriert (Gruppe 0 ist die gesamte Übereinstimmung). Man kann ihnen Namen geben:
string pattern = @"(?<user>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+)\\.(?<tld>[a-zA-Z]{2,})";// Zugriff: match.Groups["user"].ValueExtraktion von Links aus HTML
string html = @"<a href='https://example.com'>Beisp