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.
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");
C'est le moyen le plus simple:
if(str.Contains("hello"))
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);
}
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);
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");
À 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;
}
}
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);
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();
}
}
}
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);
}
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();
}
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:
strSource.Substring(0, Start)
strReplace
strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start)
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);
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();
Ajoutez simplement ce code:
if (string.Contains ("search_text")) {MessageBox.Show ("Message."); }