web-dev-qa-db-fra.com

Rechercher du texte dans une chaîne avec C #

Comment puis-je trouver un texte donné dans une chaîne? Après cela, j'aimerais créer une nouvelle chaîne entre cela et quelque chose d'autre. Par exemple...

Si la chaîne était:

This is an example string and my data is here

Et je veux créer une chaîne avec ce qui est entre "mon" et "est", comment pourrais-je faire cela? Désolé, c'est assez pseudo, mais j'espère que cela a du sens.

63
Wilson

Utilisez cette fonction.

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

Comment l'utiliser:

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

C'est le moyen le plus simple:

if(str.Contains("hello"))
61
Kemal Duran

Vous pouvez 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);
}
24
MichelZ
 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);
7
Kevin DiTraglia

Voici ma fonction en utilisant la fonction d'Oscar Jara en tant que 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. Il évite une exception levée par la version d'Oscar lors de la recherche d'une chaîne de fin qui se produit uniquement 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");
4
Johnny Cee

À l'exception de la réponse de @ Prashant, les réponses ci-dessus ont reçu une réponse incorrecte. Où se trouve la fonction "Remplacer" de la réponse? L'OP a demandé: "Après cela, j'aimerais créer une nouvelle chaîne entre cela et quelque chose d'autre".

Sur la base de l'excellente réponse de @ Oscar, j'ai élargi sa fonction pour qu'elle soit une fonction "Search And Replace".

Je pense que la réponse de @ Prashant aurait dû être la réponse acceptée par le PO, car elle remplaçait.

Quoi qu'il en soit, j'ai appelé ma variante - ReplaceBetween().

public static string ReplaceBetween(string strSource, string strStart, string strEnd, string strReplace)
{
    int Start, End;
    if (strSource.Contains(strStart) && strSource.Contains(strEnd))
    {
        Start = strSource.IndexOf(strStart, 0) + strStart.Length;
        End = strSource.IndexOf(strEnd, Start);
        string strToReplace = strSource.Substring(Start, End - Start);
        string newString = strSource.Concat(Start,strReplace,End - Start);
        return newString;
    }
    else
    {
        return string.Empty;
    }
}
3
Fandango68

Vous pouvez le faire de manière compacte comme ceci:

string abc = abc.Replace(abc.Substring(abc.IndexOf("me"), (abc.IndexOf("is", abc.IndexOf("me")) + 1) - abc.IndexOf("size")), string.Empty);
3
Prashant
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;

namespace oops3
{


    public class Demo
    {

        static void Main(string[] args)
        {
            Console.WriteLine("Enter the string");
            string x = Console.ReadLine();
            Console.WriteLine("enter the string to be searched");
            string SearchText = Console.ReadLine();
            string[] myarr = new string[30];
             myarr = x.Split(' ');
            int i = 0;
            foreach(string s in myarr)
            {
                i = i + 1;
                if (s==SearchText)
                {
                    Console.WriteLine("The string found at position:" + i);

                }

            }
            Console.ReadLine();
        }


    }












        }
2
Debendra Dash
  string WordInBetween(string sentence, string wordOne, string wordTwo)
        {

            int start = sentence.IndexOf(wordOne) + wordOne.Length + 1;

            int end = sentence.IndexOf(wordTwo) - start - 1;

            return sentence.Substring(start, end);


        }
2
Reza Taibur
static void Main(string[] args)
    {

        int f = 0;
        Console.WriteLine("enter the string");
        string s = Console.ReadLine();
        Console.WriteLine("enter the Word to be searched");
        string a = Console.ReadLine();
        int l = s.Length;
        int c = a.Length;

        for (int i = 0; i < l; i++)
        {
            if (s[i] == a[0])
            {
                for (int K = i + 1, j = 1; j < c; j++, K++)
                {
                    if (s[K] == a[j])
                    {
                        f++;
                    }
                }
            }
        }
        if (f == c - 1)
        {
            Console.WriteLine("matching");
        }
        else
        {
            Console.WriteLine("not found");
        }
        Console.ReadLine();
    }
2
RAMESH

C'est la bonne façon de remplacer une partie du texte dans une chaîne (basée sur la méthode getBetween d'Oscar Jara):

public static string ReplaceTextBetween(string strSource, string strStart, string strEnd, string strReplace)
    {
        int Start, End, strSourceEnd;
        if (strSource.Contains(strStart) && strSource.Contains(strEnd))
        {
            Start = strSource.IndexOf(strStart, 0) + strStart.Length;
            End = strSource.IndexOf(strEnd, Start);
            strSourceEnd = strSource.Length - 1;

            string strToReplace = strSource.Substring(Start, End - Start);
            string newString = string.Concat(strSource.Substring(0, Start), strReplace, strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start));
            return newString;
        }
        else
        {
            return string.Empty;
        }
    }

Le string.Concat concatène 3 chaînes:

  1. La partie source de la chaîne précédant la chaîne à remplacer est trouvée - strSource.Substring(0, Start)
  2. La chaîne de remplacement - strReplace
  3. La partie source de la chaîne après la chaîne à remplacer a été trouvée - strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start)
1
João Ox Oc

D'abord trouver l'index du texte puis la sous-chaîne

        var ind = Directory.GetCurrentDirectory().ToString().IndexOf("TEXT To find");

        string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);
0
Taran

Si vous savez que vous voulez toujours la chaîne entre "mon" et "est", vous pouvez toujours effectuer les opérations suivantes:

string message = "This is an example string and my data is here";

//Get the string position of the first Word and add two (for it's length)
int pos1 = message.IndexOf("my") + 2;

//Get the string position of the next Word, starting index being after the first position
int pos2 = message.IndexOf("is", pos1);

//use substring to obtain the information in between and store in a new string
string data = message.Substring(pos1, pos2 - pos1).Trim();
0

Ajoutez simplement ce code:

if (string.Contains ("search_text")) {MessageBox.Show ("Message."); }

0
Rokonz Zaz