C # Regex dans les exemples

La traduction de l'article a été préparée spécialement pour les étudiants du cours "Développeur C #" .




La classe Regex implémente des expressions régulières en C #. Dans cet article, vous apprendrez à utiliser C # Regex pour valider diverses entrées utilisateur.

Regex en C # implémente des expressions régulières. La classe C # Regex propose des méthodes et des propriétés pour analyser un texte volumineux afin de rechercher des modèles de caractères. Dans cet article, vous apprendrez à utiliser la classe .NET Regex en C #.

Expressions régulières


Une expression régulière est utilisée pour vérifier si une chaîne correspond à un modèle. Une expression régulière (expression régulière ou regex, ou regexp) est une séquence de caractères qui définit un modèle. Un modèle peut être composé de littéraux, de nombres, de caractères, d'opérateurs ou de constructions. Le modèle est utilisé pour rechercher des correspondances dans une chaîne ou un fichier.
Les expressions régulières sont souvent utilisées lors de la vérification des entrées, de l'analyse et de la recherche de chaînes. Par exemple, vérifier une date de naissance valide, un numéro de sécurité sociale, un nom complet, dans lequel le nom et le nom de famille sont séparés par une virgule, rechercher le nombre d'occurrences d'une sous-chaîne, remplacer les sous-chaînes, les formats de date, les formats de courrier électronique valides, le format monétaire, etc.

Classe regex


Dans .NET, la classe Regex représente un moteur regex. Il peut être utilisé pour analyser rapidement de grandes quantités de texte pour trouver des modèles de caractères spécifiques, extraire, modifier, remplacer ou supprimer des sous-chaînes de texte et ajouter les chaînes extraites à la collection pour générer un rapport.

La classe Regex est définie dans l'espace de noms System.Text.RegularExpressions. Le constructeur de la classe Regex prend en paramètre une chaîne de modèle avec d'autres paramètres facultatifs.

L'extrait de code suivant crée une expression régulière à partir d'un modèle. Ici, le motif correspond à un mot commençant par la lettre «M».

//    ,     "M" string pattern = @"\b[M]\w+"; //   Regex Regex rg = new Regex(pattern); 


Le fragment de code suivant contient un long texte avec les noms des auteurs qui doivent être analysés.

 //   string authors = "Mahesh Chand, Raj Kumar, Mike Gold, Allen O'Neill, Marshal Troll"; 


La méthode Matches est utilisée pour rechercher toutes les correspondances dans une expression régulière et renvoie un MatchCollection.

 //    MatchCollection matchedAuthors = rg.Matches(authors); 


Le morceau de code suivant passe par une collection de correspondances.

 //     for (int count = 0; count < matchedAuthors.Count; count++) Console.WriteLine(matchedAuthors[count].Value); 


Voici le code complet:

 //    ,     "M" string pattern = @"\b[M]\w+"; //   Regex Regex rg = new Regex(pattern); //   string authors = "Mahesh Chand, Raj Kumar, Mike Gold, Allen O'Neill, Marshal Troll"; //    MatchCollection matchedAuthors = rg.Matches(authors); ///     for (int count = 0; count < matchedAuthors.Count; count++) Console.WriteLine(matchedAuthors[count].Value); 


Dans l'exemple ci-dessus, le code recherche le caractère "M". Mais que faire si le mot commence par «m». L'extrait de code suivant utilise le paramètre RegexOptions.IgnoreCase afin que Regex ne RegexOptions.IgnoreCase pas la casse.

 //    ,     "M" string pattern = @"\b[m]\w+"; //   Regex Regex rg = new Regex(pattern, RegexOptions.IgnoreCase); 


Remplacement de plusieurs espaces par Regex


La méthode Regex.Replace() est utilisée pour remplacer la chaîne correspondante par une nouvelle chaîne. L'exemple suivant recherche plusieurs espaces dans une chaîne avec un seul.

 //      string badString = "Here is a strig with ton of white space." ; string CleanedString = Regex.Replace(badString, "\\s+", " "); Console.WriteLine($"Cleaned String: {CleanedString}"); 


L'extrait de code suivant remplace les espaces par «-».

 string CleanedString = Regex.Replace(badString, "\\s+", "-"); 


Fractionner une chaîne en caractères à l'aide de Regex


Dans l'exemple suivant, le modèle d'expression régulière [az] + et la méthode Regex.Split() sont utilisés pour diviser une chaîne en caractères, non Regex.Split() .

 //     string azpattern = "[az]+"; string str = "Asd2323b0900c1234Def5678Ghi9012Jklm"; string[] result = Regex.Split(str, azpattern, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(500)); for (int i = 0; i < result.Length; i++) { Console.Write("'{0}'", result[i]); if (i < result.Length - 1) Console.Write(", "); } 


Expressions régulières en C #


Les expressions régulières sont la norme de correspondance des modèles pour l'analyse et la modification des chaînes, et permettent à l'utilisateur d'exprimer comment un programme informatique doit rechercher le modèle spécifié dans le texte, puis ce qu'il doit faire lorsque chaque correspondance est trouvée avec le modèle donné. Parfois, ils sont abrégés en «regex». Ils sont un moyen puissant de rechercher et de modifier des chaînes qui prennent un format spécifique.

Voici un exemple de code C # simple qui montre comment les expressions régulières sont utilisées.

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace RegularExpression1 { class Program { static void Main(string[] args) { Regex r = new Regex(@"^\+?\d{0,2}\-?\d{4,5}\-?\d{5,6}"); //  Regex    . string[] str = { "+91-9678967101", "9678967101", "+91-9678-967101", "+91-96789-67101", "+919678967101" }; //         . foreach (string s in str) { Console.WriteLine("{0} {1} a valid mobile number.", s, r.IsMatch(s) ? "is" : "is not"); //  IsMatch    ,   ,     . } } } } 


Voici une explication détaillée des expressions régulières et de leur utilisation en C # et .NET:
Expressions régulières en C #

Regex pour vérifier les e-mails


Pour tester plusieurs adresses e-mail, nous pouvons utiliser les expressions régulières suivantes. Nous séparons les adresses à l'aide du délimiteur ';'

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$

Si vous souhaitez utiliser le délimiteur ',' alors utilisez la commande suivante

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[,]{0,1}\s*)+$

et si vous souhaitez utiliser les deux délimiteurs ',' et ';' puis utilisez ceci

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;,.]{0,1}\s*)+$

Ainsi, en utilisant l'expression régulière ci-dessus, vous pouvez vérifier une ou plusieurs adresses à la fois.

En savoir plus ici: Regex pour vérifier plusieurs adresses e-mail .

Validation de l'entrée utilisateur avec des expressions régulières


Cet article explique comment utiliser des expressions régulières (la classe Regex de l'espace de noms System.Text.RegularExpressions) en C # et .NET.

Nous pouvons utiliser la méthode Regex.Match, qui prend une entrée et une expression régulière, et renvoie le succès si

 if (!Regex.Match(firstNameTextBox.Text, "^[AZ][a-zA-Z]*$").Success) {} if (!Regex.Match(addressTextBox.Text, @"^[0-9]+\s+([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(cityTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(stateTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(zipCodeTextBox.Text, @"^\d{5}$").Success) { if (!Regex.Match(phoneTextBox.Text, @"^[1-9]\d{2}-[1-9]\d{2}-\d{4}$").Success) 


En savoir plus ici:
Validation de l'entrée utilisateur avec des expressions régulières


Fractionner la chaîne à l'aide de Regex.split (regex) en C #


Dans cette partie, nous allons apprendre à casser une chaîne en utilisant RegEx en C #. Regex casse une chaîne basée sur un modèle. Il traite le délimiteur spécifié comme modèle. C'est pourquoi Regex est meilleur que string.Split. Voici quelques exemples de comment casser une chaîne en utilisant Regex en C #. Écrivons le code.

Pour utiliser Regex pour fractionner une chaîne, ajoutez les espaces de noms suivants.

 using System; using System.Text.RegularExpressions; using System.Collections.Generic; 


Exemple 1:

Séparez les nombres des chaînes à l'aide de Regex.

 string Text = "1 One, 2 Two, 3 Three is good."; string[] digits = Regex.Split(Text, @"\D+"); foreach (string value in digits) { int number; if (int.TryParse(value, out number)) { Console.WriteLine(value); } } 


Le code ci-dessus casse la chaîne à l'aide de \ D + et génère les nombres en itérant sur le résultat.

En savoir plus ici:

Fractionner une chaîne à l'aide d'expressions régulières en C #

Remplacez les caractères spéciaux de la chaîne par l'expression régulière


Dans cette partie, je vais vous expliquer comment remplacer les caractères spéciaux par des expressions régulières en C #.

Si vous avez une chaîne avec des caractères spéciaux et que vous souhaitez les supprimer ou les remplacer, vous pouvez utiliser une expression régulière pour cela.

Utilisez le code suivant:

 Regex.Replace(your String, @"[^0-9a-zA-Z]+", "") 


Ce code supprimera tous les caractères spéciaux, mais si vous ne souhaitez pas supprimer certains caractères spéciaux, par exemple, la virgule "," et les deux points ":" - apportez les modifications suivantes:

 Regex.Replace(Your String, @"[^0-9a-zA-Z:,]+", "") 


De la même manière, vous pouvez effectuer des modifications selon vos besoins.

Remarque:

Il convient de noter que les expressions régulières ne sont pas une panacée pour chaque petite manipulation de chaîne. Si vous avez besoin d'une analyse simple fournie par la classe String ou d'autres classes, essayez de l'utiliser.


Pour plus de lecture



Si vous êtes nouveau dans les expressions régulières, je vous recommande de lire cet article, Introduction aux expressions régulières .

Voici un autre article: " Utilisation d'expressions régulières en C # "

Source: https://habr.com/ru/post/fr469989/


All Articles