Expressions régulières en C# avec exemples pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Expressions régulières en C# : guide complet pour débutants

\n

Les expressions régulières (regular expressions, regex) sont un outil puissant pour rechercher, remplacer et valider des chaînes selon un motif donné. En C# (.NET), le travail avec les expressions régulières est implémenté via l'espace de noms System.Text.RegularExpressions. Cet article vous aidera à maîtriser les bases : de la création de motifs simples à l'utilisation de toutes les fonctionnalités de la classe Regex.

\n\n

1. Bases du travail avec Regex en C#

\n

Pour commencer, importez l'espace de noms :

\n
using System.Text.RegularExpressions;
\n

La classe Regex fournit des méthodes statiques et d'instance. La façon la plus simple de vérifier si une chaîne contient une sous-chaîne correspondant à un motif est la méthode IsMatch :

\n
string text = "Bonjour, mon email : test@example.com";\nstring pattern = @"\\w+@\\w+\\.\\w+"; // motif simple d'email\n\nbool hasEmail = Regex.IsMatch(text, pattern);\nConsole.WriteLine(hasEmail); // True
\n

Analyse du motif :

\n
    \n
  • \\w+ — une ou plusieurs lettres, chiffres ou tirets bas
  • \n
  • @ — le symbole "arobase"
  • \n
  • \\. — point échappé (sans échappement, le point signifie "n'importe quel caractère")
  • \n
\n

Pour des appels répétés, il est préférable de créer un objet Regex afin d'éviter une recompilation du motif :

\n
Regex emailRegex = new Regex(@"\\w+@\\w+\\.\\w+");\nConsole.WriteLine(emailRegex.IsMatch("admin@site.ru")); // True
\n\n

2. Recherche de toutes les correspondances : Match et MatchCollection

\n

La méthode Match retourne la première correspondance, tandis que Matches retourne toutes les correspondances sous forme de collection MatchCollection. Chaque objet Match contient des informations sur la sous-chaîne trouvée, sa position et sa longueur.

\n

Exemple : extraction de tous les nombres d'une chaîne

\n
string data = "En 2023, il y a eu 15 événements, en 2024 — déjà 23.";\nstring numberPattern = @"\\d+"; // un ou plusieurs chiffres\n\nMatchCollection matches = Regex.Matches(data, numberPattern);\n\nforeach (Match match in matches)\n{\n    Console.WriteLine($"Trouvé : {match.Value} à la position {match.Index}");\n}\n// Affichage :\n// Trouvé : 2023 à la position 3\n// Trouvé : 15 à la position 22\n// Trouvé : 2024 à la position 37\n// Trouvé : 23 à la position 51
\n

Travail avec les groupes (Group). Les groupes permettent d'extraire des parties d'une correspondance. Par exemple, lors de la recherche d'une date au format "jj.mm.aaaa", on peut obtenir séparément le jour, le mois et l'année :

\n
string input = "Aujourd'hui 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($"Jour : {match.Groups[1].Value}");   // 25\n    Console.WriteLine($"Mois : {match.Groups[2].Value}");  // 12\n    Console.WriteLine($"Année : {match.Groups[3].Value}");    // 2024\n}
\n

Les groupes sont numérotés à partir de 1 (le groupe 0 correspond à l'ensemble de la correspondance). Les groupes nommés sont plus faciles à lire :

\n
string namedPattern = @"(?<day>\\d{2})\\.(?<month>\\d{2})\\.(?<year>\\d{4})";\nmatch = Regex.Match(input, namedPattern);\nConsole.WriteLine(match.Groups["day"].Value);   // 25
\n\n

3. Fonctionnalités avancées : remplacements et options

\n

Remplacement de texte avec Regex.Replace. Permet non seulement de supprimer ou remplacer une sous-chaîne, mais aussi d'utiliser des groupes dans la chaîne de remplacement :

\n
string phone = "+7 (123) 456-78-90";\n// Supprime tout sauf les chiffres\nstring clean = Regex.Replace(phone, @"[^\\d]", "");\nConsole.WriteLine(clean); // 71234567890\n\n// Change le format : (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
\n

Options importantes (RegexOptions) :

\n
    \n

Blogs

Book Recommendations