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.
416 Answers
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"); 4This is the simplest way:
if(str.Contains("hello")) 4You 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); } 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); 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"); 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); 1Except 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; } } 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(); } 0 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); } 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(); } } } 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:
- The string source portion before the string to replace found -
strSource.Substring(0, Start) - The replacing string -
strReplace - The string source portion after the string to replace found -
strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start)
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(); 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); Simply add this code:
1if (string.Contains("search_text")) { MessageBox.Show("Message."); }
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; } 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(); }