C# Reguläre Ausdrücke (Regex): Praktischer Leitfaden
Was sind Reguläre Ausdrücke?
System.Text.RegularExpressions stellt die Engine bereit.
Wichtige Konstrukte (Übersicht)
- Zeichenklassen:
[abc],[a-z],\d(Ziffer),\w(Wortzeichen),\s(Whitespace) - Anker:
^(Zeilenanfang),$(Zeilenende),\b(Wortgrenze) - Quantoren:
*(0+),+(1+),?(0/1),{n},{n,},{n,m} - Gruppierung:
(...)(Capture),(?:...)(Non-Capture),(?<name>...)(Named Group) - Alternation:
a|b(a oder b) - Backreferences:
\1,\k<name> - Ersetzungen:
$1,${name}
Die Regex-Klasse
Wichtigste statischen/Instanz-Methoden:
| Methode | Beschreibung |
|---|---|
IsMatch(input) | Prüft, ob Muster im Input vorkommt. |
Match(input) | Liefert erstes Match-Objekt. |
Matches(input) | Liefert MatchCollection (alle Treffer). |
Replace(input, replacement) | Ersetzt alle Treffer. |
Split(input) | Zerlegt String an Treffern. |
Beispiel 1: Wörter beginnend mit 'S'
using System;
using System.Text.RegularExpressions;
string text = "A Thousand Splendid Suns";
string pattern = @"\bS\w*"; // Wortgrenze, 'S', dann Wortzeichen
foreach (Match m in Regex.Matches(text, pattern))
Console.WriteLine(m.Value); // Splendid, Suns
Beispiel 2: Wörter mit 'm' beginnend und 'e' endend
string text = "make maze and manage to measure it";
string pattern = @"\bm\w*e\b";
foreach (Match m in Regex.Matches(text, pattern))
Console.WriteLine(m.Value); // make, maze, manage, measure
Beispiel 3: Mehrfache Whitespaces normalisieren
string input = "Hello World";
string pattern = @"\s+";
string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Console.WriteLine($"Original: '{input}'");
Console.WriteLine($"Result: '{result}'"); // "Hello World"
Performance-Tipps
RegexOptions.Compiledfür häufig verwendete Patterns (einmaliger JIT-Overhead, dann schneller).RegexOptions.CultureInvariantfür konsistentes Verhalten.- Statische
Regex-Methoden cachen intern; für hohe Durchsatz-Raten Instanz wiederverwenden. - Vermeiden Sie katastrophales Backtracking (z. B.
(a+)+) – nutzen Sie atomare Gruppen(?>...)oder Possessive Quantoren (nicht direkt in .NET, aber via(?>...)).
Verbatim-Strings für Patterns
Immer @"" verwenden, um doppeltes Escapen zu vermeiden:
// Statt "\\d+" → @"\d+"
string pattern = @"\b\d{3}-\d{2}-\d{4}\b"; // US-SSN Pattern
C Sprache
- C# Ausdrücke, Anweisungen & Blöcke: Umfassender Leitfaden mit Beispielen
- C# Strings meistern: Grundlagen, Operationen & fortgeschrittene Techniken
- Java Ausdrücke, Anweisungen und Blöcke verstehen
- Java Strings meistern: Erstellung, Methoden und Best Practices
- String-Repräsentationen in Java Enums meistern
- Java Lambda Expressions meistern: Von Grundlagen bis Stream API
- C++ String‑Funktionen meistern: strcpy, strcat, strlen, strcmp – Praxisbeispiele
- C Strings einfach gemacht: Deklaration, Ein- & Ausgabe, Bibliotheksfunktionen
- Pythons str.count(): Zeichen & Teilstrings zählen mit Beispielen
- Java Strings Klasse: String-Erstellung & Manipulation meistern