Find text in string with C#

C#StringFind

C# Problem Overview


How can I find given text within a string? After that, I'd like to create a new string between that and something else. For instance, if the string was:

This is an example string and my data is here

And I want to create a string with whatever is between "my " and " is" how could I do that? This is pretty pseudo, but hopefully it makes sense.

C# Solutions


Solution 1 - C#

Use this method:

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 "";
}

How to use it:

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

Solution 2 - C#

This is the simplest way:

if(str.Contains("hello"))

Solution 3 - C#

You could use 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);
}

Solution 4 - C#

 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);

Solution 5 - C#

Here's my function using Oscar Jara's function as a model.

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;
}

This version does at most two searches of the text. It avoids an exception thrown by Oscar's version when searching for an end string that only occurs before the start string, i.e., getBetween(text, "my", "and");.

Usage is the same:

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

Solution 6 - C#

You can do it compactly like this:

string abc = abc.Replace(abc.Substring(abc.IndexOf("me"), (abc.IndexOf("is", abc.IndexOf("me")) + 1) - abc.IndexOf("size")), string.Empty);

Solution 7 - C#

Except for @Prashant's answer, the above answers have been answered incorrectly. Where is the "replace" feature of the answer? The OP asked, "After that, I'd like to create a new string between that and something else".

Based on @Oscar's excellent response, I have expanded his function to be a "Search And Replace" function in one.

I think @Prashant's answer should have been the accepted answer by the OP, as it does a replace.

Anyway, I've called my variant - 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;
    }
}

Solution 8 - C#

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();
    }

Solution 9 - C#

  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);


        }

Solution 10 - C#

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();
        }
        

    }


            

       
       

           

           


        }

Solution 11 - C#

This is the correct way to replace a portion of text inside a string (based upon the getBetween method by 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;
        }
    }

The string.Concat concatenates 3 strings:

  1. The string source portion before the string to replace found - strSource.Substring(0, Start)
  2. The replacing string - strReplace
  3. The string source portion after the string to replace found - strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start)

Solution 12 - C#

If you know that you always want the string between "my" and "is", then you can always perform the following:

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();
        

Solution 13 - C#

First find the index of text and then substring

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

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

Solution 14 - C#

Simply add this code:

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

Solution 15 - C#

I have different approach on ReplaceTextBetween() function.

public static string ReplaceTextBetween(this string strSource, string strStart, string strEnd, string strReplace)
        {
            if (strSource.Contains(strStart) && strSource.Contains(strEnd))
            {
                var startIndex = strSource.IndexOf(strStart, 0) + strStart.Length;

                var endIndex = strSource.IndexOf(strEnd, startIndex);

                var strSourceLength = strSource.Length;

                var strToReplace = strSource.Substring(startIndex, endIndex - startIndex);

                var concatStart = startIndex + strToReplace.Length;

                var beforeReplaceStr = strSource.Substring(0, startIndex);

                var afterReplaceStr = strSource.Substring(concatStart, strSourceLength - endIndex);

                return string.Concat(beforeReplaceStr, strReplace, afterReplaceStr);
            }

            return strSource;
        }

Solution 16 - C#

Correct answer here without using any pre-defined method.

    static void WordContainsInString()
    {
        int f = 0;
        Console.WriteLine("Input the string");
        string str = Console.ReadLine();
        Console.WriteLine("Input the word to search");
        string word = Console.ReadLine();
        int l = str.Length;
        int c = word.Length;

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWilsonView Question on Stackoverflow
Solution 1 - C#Oscar JaraView Answer on Stackoverflow
Solution 2 - C#Kemal DuranView Answer on Stackoverflow
Solution 3 - C#MichelZView Answer on Stackoverflow
Solution 4 - C#Kevin DiTragliaView Answer on Stackoverflow
Solution 5 - C#Johnny CeeView Answer on Stackoverflow
Solution 6 - C#PrashantView Answer on Stackoverflow
Solution 7 - C#Fandango68View Answer on Stackoverflow
Solution 8 - C#RAMESHView Answer on Stackoverflow
Solution 9 - C#Reza TaiburView Answer on Stackoverflow
Solution 10 - C#Debendra DashView Answer on Stackoverflow
Solution 11 - C#João Ox OcView Answer on Stackoverflow
Solution 12 - C#Lori Lalonde - MSFTView Answer on Stackoverflow
Solution 13 - C#TaranView Answer on Stackoverflow
Solution 14 - C#Rokonz ZazView Answer on Stackoverflow
Solution 15 - C#009toperskyView Answer on Stackoverflow
Solution 16 - C#Rahul JhaView Answer on Stackoverflow