Expressions régulières en C# : bases du travail avec la classe Regex
Les expressions régulières (regex) sont un outil puissant pour rechercher, extraire, remplacer et valider des chaînes selon un modèle donné. En C# (.NET), tout le travail avec les expressions régulières est concentré dans l'espace de noms System.Text.RegularExpressions et la classe centrale Regex. Dans cet article, nous allons explorer les fonctionnalités de base et avancées des expressions régulières en C# à travers des exemples pratiques.
1. La classe Regex : méthodes principales et création de modèles
Pour travailler avec les expressions régulières en C#, vous devez inclure l'espace de noms :
using System.Text.RegularExpressions;La classe Regex fournit plusieurs méthodes clés :
- IsMatch — vérifie si la chaîne contient une correspondance avec le modèle.
- Match — retourne la première correspondance.
- Matches — retourne toutes les correspondances.
- Replace — remplace les correspondances trouvées par la chaîne spécifiée.
- Split — divise la chaîne selon les correspondances.
Un exemple simple de validation d'adresse email :
string email = "user@example.com";string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w+$";bool isValid = Regex.IsMatch(email, pattern);Console.WriteLine(isValid); // TrueNotez le symbole @ avant la chaîne — il s'agit d'une chaîne verbatim, qui simplifie l'écriture des antislashs (\\) dans les modèles.
2. Recherche et extraction de données : méthodes Match et Matches
La méthode Match retourne un objet Match qui contient des informations sur la première correspondance. S'il n'y a pas de correspondance, la propriété Success sera false.
Exemple d'extraction d'un numéro de téléphone à partir d'un texte :
string text = "Appelez au +7 (123) 456-78-90 ou au +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);}// Sortie :// +7 (123) 456-78-90// +7 (987) 654-32-10La méthode Matches retourne une collection de toutes les correspondances. Vous pouvez également utiliser des groupes de capture pour extraire des parties spécifiques :
string text = "ID: 12345, Prix: 999.99";string pattern = @"Prix:\\s*(\\d+\\.?\\d*)";Match match = Regex.Match(text, pattern);
if (match.Success){ string price = match.Groups[1].Value; Console.WriteLine($"Prix : {price}"); // Prix : 999.99}Les groupes de capture sont désignés par des parenthèses () dans le modèle. Le groupe zéro correspond à l'ensemble de la correspondance, et les groupes de 1 à N sont les sous-chaînes capturées.
3. Remplacement et division de chaînes : Replace et Split
La méthode Replace permet de remplacer les correspondances de manière flexible. Les références arrière ($1, $2, etc.) sont prises en charge pour insérer les groupes capturés.
Exemple de formatage de date de "YYYY-MM-DD" à "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.2025La méthode Split divise une chaîne selon les correspondances avec le modèle. C'est pratique pour analyser des CSV ou des logs :
string data = "pomme;banane;cerise;raisin";string pattern = @";";string[] fruits = Regex.Split(data, pattern);foreach (var fruit in fruits){ Console.WriteLine(fruit);}// Sortie :// pomme// banane// cerise// raisinVous pouvez également utiliser des séparateurs plus complexes, comme plusieurs espaces ou signes de ponctuation :
string text = "un deux,trois;quatre";string[] parts = Regex.Split(