Expressions régulières en C# avec exemples : de la théorie à la pratique
\n\nLes expressions régulières (regex) sont un outil puissant pour rechercher, extraire et remplacer du texte selon un modèle. En C# (.NET), le travail avec les regex est implémenté via l'espace de noms System.Text.RegularExpressions et la classe Regex. Dans cet article, nous allons explorer les principales fonctionnalités avec des exemples concrets : de la simple recherche à la validation d'email et de téléphone.
1. Bases : la classe Regex et ses méthodes
\n\nLa classe principale pour travailler est Regex. Elle fournit des méthodes statiques et d'instance. Voici les principales :
- \n
IsMatch— vérifie si la chaîne contient une correspondance avec le modèle. \nMatch— trouve la première correspondance. \nMatches— trouve toutes les correspondances. \nReplace— remplace les correspondances par la chaîne spécifiée. \nSplit— divise la chaîne selon le modèle. \n
Exemple 1. Vérification simple
\nusing System;\nusing System.Text.RegularExpressions;\n\nclass Program\n{\n static void Main()\n {\n string text = "Bonjour, mon numéro : 123-456-7890";\n string pattern = @"\\d{3}-\\d{3}-\\d{4}";\n\n if (Regex.IsMatch(text, pattern))\n {\n Console.WriteLine("Numéro trouvé !");\n }\n }\n}\n\n\nDans cet exemple, \\d{3} signifie « exactement trois chiffres ». L'antislash est échappé avec @ (chaîne verbatim).
2. Groupes de capture et extraction de données
\n\nLes groupes de capture permettent d'extraire des parties de la correspondance. Ils sont définis par des parenthèses (). Chaque groupe reçoit un numéro d'ordre (commençant à 1).
Exemple 2. Extraction du nom et du domaine d'un email
\nstring email = "user@example.com";\nstring pattern = @"^(\\w+)@(\\w+\\.\\w+)$";\n\nMatch match = Regex.Match(email, pattern);\n\nif (match.Success)\n{\n Console.WriteLine($"Identifiant : {match.Groups[1].Value}"); // user\n Console.WriteLine($"Domaine : {match.Groups[2].Value}"); // example.com\n}\n\n\nIci, (\\w+) capture un ou plusieurs caractères alphanumériques. ^ et $ sont les ancres de début et de fin de chaîne.
Exemple 3. Analyse d'URL
\nstring url = "https://pythonlib.ru/page?id=42";\nstring pattern = @"^(https?)://([^/]+)(/.*)?$";\n\nMatch m = Regex.Match(url, pattern);\nif (m.Success)\n{\n Console.WriteLine($"Protocole : {m.Groups[1].Value}"); // https\n Console.WriteLine($"Domaine : {m.Groups[2].Value}"); // pythonlib.ru\n Console.WriteLine($"Chemin : {m.Groups[3].Value}"); // /page?id=42\n}\n\n\n3. Remplacement et suppression de texte
\n\nLa méthode Replace permet de remplacer les fragments trouvés. On peut utiliser des références arrière comme $1, $2 pour insérer des groupes.
Exemple 4. Formatage d'un numéro de téléphone
\nstring raw = "89161234567";\nstring pattern = @"(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})";\nstring replacement = "+7 ($2) $3-$4-$5";\n\nstring formatted = Regex.Replace(raw, pattern, replacement);\nConsole.WriteLine(formatted); // +7 (916) 123-45-67\n\n\nExemple 5. Suppression des espaces superflus
\nstring text = "Ceci est un texte avec des espaces superflus.";\nstring cleaned = Regex.Replace(text, @"\\s+", " ");\nConsole.WriteLine(cleaned); // "Ceci est un texte avec des espaces superflus."\n\n\n\\s+ — un ou plusieurs caractères d'espacement. On remplace par un espace simple.
4. Cas concrets : validation d'email et de téléphone
\n\nEn pratique, les regex sont le plus souvent utilisées pour valider les saisies utilisateur. Voici deux exemples typiques.
\n\nValidation d'email (simplifiée)
\npublic static bool IsValidEmail(string email)\n{\n if (string.IsNullOrWhiteSpace(email))\n return false;\