it-swarm.com.de

Suchen von Text in einer Zeichenfolge mit C #

Wie kann ich einen bestimmten Text in einer Zeichenfolge finden? Danach möchte ich eine neue Zeichenfolge zwischen dieser und etwas anderem erstellen. Zum Beispiel...

Wenn die Zeichenfolge lautete:

This is an example string and my data is here

Und ich möchte eine Zeichenfolge mit dem erstellen, was zwischen "Mein" und "Ist" steht. Wie könnte ich das tun? Sorry, das ist ziemlich pseudo, aber hoffentlich macht es Sinn.

63
Wilson

Verwenden Sie diese Funktion.

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

Wie man es benutzt:

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

Dies ist der einfachste Weg:

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

Sie könnten Regex verwenden:

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

Hier ist meine Funktion, Oscar Jaras Funktion als Modell zu verwenden.

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

Diese Version durchsucht den Text höchstens zweimal. Es wird eine Ausnahme vermieden, die von Oscars Version ausgelöst wird, wenn nach einer Endzeichenfolge gesucht wird, die nur vor der Startzeichenfolge auftritt, d. H. getBetween(text, "my", "and");.

Die Verwendung ist die gleiche:

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

Mit Ausnahme der Antwort von @ Prashant wurden die obigen Antworten falsch beantwortet. Wo ist das "Ersetzen" -Feature der Antwort? Das OP fragte: "Danach möchte ich eine neue Zeichenfolge zwischen dieser und etwas anderem erstellen".

Aufgrund der hervorragenden Resonanz von @ Oscar habe ich seine Funktion zu einer "Search And Replace" - Funktion in einer erweitert.

Ich denke, die Antwort von @ Prashant hätte die akzeptierte Antwort des OP sein müssen, da sie ersetzt.

Jedenfalls habe ich meine Variante - ReplaceBetween() genannt.

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

Sie können es kompakt so machen:

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

Dies ist der richtige Weg, um einen Teil des Textes innerhalb eines Strings zu ersetzen (basierend auf der getBetween-Methode von 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;
        }
    }

Das string.Concat Verkettet 3 Zeichenketten:

  1. Der String-Quellteil vor dem zu ersetzenden String - strSource.Substring(0, Start)
  2. Die ersetzende Zeichenfolge - strReplace
  3. Der Stringquellenteil nach dem zu ersetzenden String - strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start)
1
João Ox Oc

Suchen Sie zuerst den Index des Texts und dann die Teilzeichenfolge

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

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

Wenn Sie wissen, dass Sie immer die Zeichenfolge zwischen "my" und "is" möchten, können Sie immer Folgendes ausführen:

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

Fügen Sie einfach diesen Code hinzu:

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

0
Rokonz Zaz