92 votes

Trouver du texte dans une chaîne de caractères avec C#

Comment trouver un texte donné dans une chaîne de caractères ? Ensuite, j'aimerais créer une nouvelle chaîne entre ce texte et un autre. Par exemple, si la chaîne est :

This is an example string and my data is here

Et je veux créer une chaîne de caractères avec ce qui se trouve entre "mon" et "est", comment puis-je faire cela ? C'est assez pseudo, mais j'espère que ça a du sens.

199voto

Oscar Jara Points 5104

Utilisez cette méthode :

public static string getBetween(string strSource, string strStart, string strEnd)
{
    if (strSource.Contains(strStart) && strSource.Contains(strEnd))
    {
        int Start, End;
        Start = strSource.IndexOf(strStart, 0) + strStart.Length;
        End = strSource.IndexOf(strEnd, Start);
        return strSource.Substring(Start, End - Start);
    }

    return "";
}

Comment l'utiliser :

string source = "This is an example string and my data is here";
string data = getBetween(source, "my", "is");

78voto

Kemal Duran Points 172

C'est le moyen le plus simple :

if(str.Contains("hello"))

29voto

MichelZ Points 630

Vous pourriez utiliser Regex :

var regex = new Regex(".*my (.*) is.*");
if (regex.IsMatch("This is an example string and my data is here"))
{
    var myCapturedText = regex.Match("This is an example string and my data is here").Groups[1].Value;
    Console.WriteLine("This is my captured text: {0}", myCapturedText);
}

9voto

Kevin DiTraglia Points 9303
 string string1 = "This is an example string and my data is here";
 string toFind1 = "my";
 string toFind2 = "is";
 int start = string1.IndexOf(toFind1) + toFind1.Length;
 int end = string1.IndexOf(toFind2, start); //Start after the index of 'my' since 'is' appears twice
 string string2 = string1.Substring(start, end - start);

5voto

Johnny Cee Points 348

Voici ma fonction en utilisant la fonction d'Oscar Jara comme modèle.

public static string getBetween(string strSource, string strStart, string strEnd) {
   const int kNotFound = -1;

   var startIdx = strSource.IndexOf(strStart);
   if (startIdx != kNotFound) {
      startIdx += strStart.Length;
      var endIdx = strSource.IndexOf(strEnd, startIdx);
      if (endIdx > startIdx) {
         return strSource.Substring(startIdx, endIdx - startIdx);
      }
   }
   return String.Empty;
}

Cette version effectue au maximum deux recherches dans le texte. Elle évite une exception levée par la version d'Oscar lors de la recherche d'une chaîne de fin qui n'apparaît qu'avant la chaîne de début, c'est-à-dire, getBetween(text, "my", "and"); .

L'utilisation est la même :

string text = "This is an example string and my data is here";
string data = getBetween(text, "my", "is");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X