Encuentra texto en cadena con C #

¿Cómo puedo encontrar el texto dado dentro de una cadena? Después de eso, me gustaría crear una nueva cadena entre eso y otra cosa. Por ejemplo…

Si la cadena fue:

This is an example string and my data is here 

Y quiero crear una cadena con lo que esté entre “mi” y “es” ¿cómo podría hacer eso? Lo siento, esto es bastante pseudo, pero espero que tenga sentido.

Usa esta función

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

Cómo usarlo:

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

Esta es la forma más simple:

 if(str.Contains("hello")) 

Podría usar 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); 

Puedes hacerlo de forma compacta así:

 string abc = abc.Replace(abc.Substring(abc.IndexOf("me"), (abc.IndexOf("is", abc.IndexOf("me")) + 1) - abc.IndexOf("size")), 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(); } 

Excepto por la respuesta de @Prashant, las respuestas anteriores han sido respondidas incorrectamente. ¿Dónde está la característica “reemplazar” de la respuesta? El OP preguntó: “Después de eso, me gustaría crear una nueva cadena entre eso y otra cosa”.

Basado en la excelente respuesta de @Sarca, he ampliado su función para que sea una función de "Search And Replace" en uno.

Creo que la respuesta de @Prashant debería haber sido la respuesta aceptada por el OP, ya que reemplaza.

De todos modos, he llamado a mi 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; } } 
  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(); } } } 

Aquí está mi función usando la función de Oscar Jara como modelo.

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

Esta versión hace como máximo dos búsquedas del texto. Evita una excepción lanzada por la versión de Oscar al buscar una cadena final que solo ocurre antes de la cadena de inicio, es decir, getBetween(text, "my", "and"); .

El uso es el mismo:

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

Si sabe que siempre quiere la cadena entre “mi” y “es”, entonces siempre puede realizar lo siguiente:

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

Primero encuentre el índice de texto y luego la subcadena

  var ind = Directory.GetCurrentDirectory().ToString().IndexOf("TEXT To find"); string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);