Guide pratique pour faire des recherches dans des chaînesHow to: search strings

Vous pouvez utiliser deux stratégies principales pour rechercher du texte dans des chaînes.You can use two main strategies to search for text in strings. Les méthodes de la classe String recherchent un texte spécifique.Methods of the String class search for specific text. Les expressions régulières recherchent des modèles dans du texte.Regular expressions search for patterns in text.

Notes

Les exemples C# de cet article s’exécutent dans l’exécuteur et le terrain de jeu du code inline Try.NET.The C# examples in this article run in the Try.NET inline code runner and playground. Sélectionnez le bouton Exécuter pour exécuter un exemple dans une fenêtre interactive.Select the Run button to run an example in an interactive window. Une fois que vous avez exécuté le code, vous pouvez le modifier et exécuter le code modifié en resélectionnant Exécuter.Once you execute the code, you can modify it and run the modified code by selecting Run again. La code modifié s’exécute dans la fenêtre interactive ou, si la compilation échoue, la fenêtre interactive affiche tous les messages d’erreur du compilateur C#.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

Le type string, qui est un alias de la classe System.String, propose un certain nombre de méthodes utiles pour rechercher le contenu d’une chaîne.The string type, which is an alias for the System.String class, provides a number of useful methods for searching the contents of a string. En voici quelques-unes : Contains, StartsWith, EndsWith, IndexOf, LastIndexOf.Among them are Contains, StartsWith, EndsWith, IndexOf, LastIndexOf. La classe System.Text.RegularExpressions.Regex fournit un vocabulaire étendu pour rechercher des modèles dans du texte.The System.Text.RegularExpressions.Regex class provides a rich vocabulary to search for patterns in text. Dans cet article, vous découvrez ces techniques et comment choisir la meilleure méthode pour vos besoins.In this article, you learn these techniques and how to choose the best method for your needs.

Une chaîne contient-elle un certain texte ?Does a string contain text?

Les méthodes String.Contains, String.StartsWith et String.EndsWith recherchent un texte spécifique dans une chaîne.The String.Contains, String.StartsWith and String.EndsWith methods search a string for specific text. L’exemple suivant montre chacune de ces méthodes et une variante qui utilise une recherche sans respecter la casse :The following example shows each of these methods and a variation that uses a case insensitive search:

string factMessage = "Extension methods have all the capabilities of regular static methods.";

// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");

// Simple comparisons are always case sensitive!
bool containsSearchResult = factMessage.Contains("extension");
Console.WriteLine($"Starts with \"extension\"? {containsSearchResult}");

// For user input and strings that will be displayed to the end user, 
// use the StringComparison parameter on methods that have it to specify how to match strings.
bool ignoreCaseSearchResult = factMessage.StartsWith("extension", System.StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"Starts with \"extension\"? {ignoreCaseSearchResult} (ignoring case)");

bool endsWithSearchResult = factMessage.EndsWith(".", System.StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"Ends with '.'? {endsWithSearchResult}");

L’exemple précédent montre un point important de l’utilisation de ces méthodes.The preceding example demonstrates an important point for using these methods. Par défaut, les recherches respectent la casse.Searches are case-sensitive by default. Vous utilisez la valeur d’énumération StringComparison.CurrentCultureIgnoreCase pour spécifier une recherche qui ne respecte pas la casse.You use the StringComparison.CurrentCultureIgnoreCase enum value to specify a case insensitive search.

Où le texte recherché se trouve-t-il dans une chaîne ?Where does the sought text occur in a string?

Les méthodes IndexOf et LastIndexOf recherchent aussi du texte dans des chaînes.The IndexOf and LastIndexOf methods also search for text in strings. Ces méthodes retournent l’emplacement du texte recherché.These methods return the location of the text being sought. Si le texte n’est pas trouvé, elles retournent -1.If the text isn't found, they return -1. L’exemple suivant montre une recherche de la première et de la dernière occurrence du mot « methods » et affiche le texte qui se trouve entre les deux.The following example shows a search for the first and last occurrence of the word "methods" and displays the text in between.

string factMessage = "Extension methods have all the capabilities of regular static methods.";

// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");

// This search returns the substring between two strings, so 
// the first index is moved to the character just after the first string.
int first = factMessage.IndexOf("methods") + "methods".Length;
int last = factMessage.LastIndexOf("methods");
string str2 = factMessage.Substring(first, last - first);
Console.WriteLine($"Substring between \"methods\" and \"methods\": '{str2}'");

Recherche de texte spécifique en utilisant des expressions régulièresFinding specific text using regular expressions

La classe System.Text.RegularExpressions.Regex permet d’effectuer des recherches de chaînes.The System.Text.RegularExpressions.Regex class can be used to search strings. Ces recherches peuvent varier en complexité et aller de modèles simples à des modèles plus compliqués.These searches can range in complexity from simple to complicated text patterns.

L’exemple de code suivant recherche le mot « the » ou « their » dans une phrase, indépendamment de la casse.The following code example searches for the word "the" or "their" in a sentence, ignoring case. La méthode statique Regex.IsMatch effectue la recherche.The static method Regex.IsMatch performs the search. Vous lui passez la chaîne à rechercher et un modèle de recherche.You give it the string to search and a search pattern. Dans ce cas, un troisième argument spécifie que la recherche est insensible à la casse.In this case, a third argument specifies case-insensitive search. Pour plus d'informations, consultez System.Text.RegularExpressions.RegexOptions.For more information, see System.Text.RegularExpressions.RegexOptions.

Le modèle de recherche décrit le texte que vous recherchez.The search pattern describes the text you search for. Le tableau suivant décrit chaque élément du modèle de recherche.The following table describes each element of the search pattern. (Le tableau ci-dessous utilise une barre oblique inversée [\] qui, dans une chaîne C#, doit être précédée d’un caractère d’échappement sous la forme \\).(The table below uses the single \ which must be escaped as \\ in a C# string).

patternpattern SignificationMeaning
thethe correspond au texte « the »match the text "the"
(eir)?(eir)? correspond à 0 ou 1 occurrence de « eir »match 0 or 1 occurrence of "eir"
\s\s correspond à un espace blancmatch a white-space character
string[] sentences =
{
    "Put the water over there.",
    "They're quite thirsty.",
    "Their water bottles broke."
};

string sPattern = "the(ir)?\\s";

foreach (string s in sentences)
{
    Console.Write($"{s,24}");

    if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
    {
        Console.WriteLine($"  (match for '{sPattern}' found)");
    }
    else
    {
        Console.WriteLine();
    }
}

Conseil

Les méthodes string sont généralement de meilleurs choix quand vous recherchez une chaîne précise.The string methods are usually better choices when you are searching for an exact string. Les expressions régulières sont mieux adaptées quand vous recherchez un certain modèle dans une chaîne source.Regular expressions are better when you are searching for some pattern is a source string.

Une chaîne suit-elle un modèle ?Does a string follow a pattern?

Le code suivant utilise des expressions régulières pour valider le format de chaque chaîne d’un tableau.The following code uses regular expressions to validate the format of each string in an array. La validation doit vérifier que chaque chaîne a la forme d’un numéro de téléphone constitué de trois groupes de chiffres séparés par des tirets, les deux premiers groupes contenant trois chiffres et le troisième en contenant quatre.The validation requires that each string have the form of a telephone number in which three groups of digits are separated by dashes, the first two groups contain three digits, and the third group contains four digits. Le modèle de recherche utilise l’expression régulière ^\\d{3}-\\d{3}-\\d{4}$.The search pattern uses the regular expression ^\\d{3}-\\d{3}-\\d{4}$. Pour plus d’informations, consultez Langage des expressions régulières - Aide-mémoire.For more information, see Regular Expression Language - Quick Reference.

patternpattern SignificationMeaning
^ correspond au début de la chaînematches the beginning of the string
\d{3}\d{3} correspond à exactement 3 caractères numériquesmatches exactly 3 digit characters
- correspond au caractère « - ».matches the '-' character
\d{3}\d{3} correspond à exactement 3 caractères numériquesmatches exactly 3 digit characters
- correspond au caractère « - ».matches the '-' character
\d{4}\d{4} correspond à exactement 4 caractères numériquesmatches exactly 4 digit characters
$ correspond à la fin de la chaînematches the end of the string
string[] numbers =
{
    "123-555-0190",
    "444-234-22450",
    "690-555-0178",
    "146-893-232",
    "146-555-0122",
    "4007-555-0111",
    "407-555-0111",
    "407-2-5555",
    "407-555-8974",
    "407-2ab-5555",
    "690-555-8148",
    "146-893-232-"
};

string sPattern = "^\\d{3}-\\d{3}-\\d{4}$";

foreach (string s in numbers)
{
    Console.Write($"{s,14}");

    if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))
    {
        Console.WriteLine(" - valid");
    }
    else
    {
        Console.WriteLine(" - invalid");
    }
}

Ce seul modèle de recherche correspond à de nombreuses chaînes valides.This single search pattern matches many valid strings. Les expressions régulières sont mieux adaptées pour rechercher un modèle ou pour effectuer une validation par rapport à un modèle, et le sont moins pour une seule chaîne de texte.Regular expressions are better to search for or validate against a pattern, rather than a single text string.

Vous pouvez essayer ces exemples en examinant le code dans notre dépôt GitHub.You can try these samples by looking at the code in our GitHub repository. Vous pouvez aussi télécharger les exemples sous forme de fichier zip.Or you can download the samples as a zip file.

Voir aussiSee also