91

文字列内の特定のテキストを見つけるにはどうすればよいですか?その後、それと他の何かの間に新しい文字列を作成したいと思います。たとえば、文字列が次の場合:

This is an example string and my data is here

そして、「my」と「is」の間にある文字列を作成したいのですが、どうすればよいでしょうか。これはかなり疑似的ですが、うまくいけばそれは理にかなっています。

4

16 に答える 16

197

この方法を使用します。

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

それの使い方:

string source = "This is an example string and my data is here";
string data = getBetween(source, "my", "is");
于 2012-05-22T20:43:14.890 に答える
78

これが最も簡単な方法です。

if(str.Contains("hello"))
于 2013-08-06T09:51:54.200 に答える
29

正規表現を使用できます:

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);
}
于 2012-05-22T20:47:54.043 に答える
9
 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);
于 2012-05-22T20:42:58.930 に答える
5

これがオスカー・ジャラの関数をモデルにした私の関数です。

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

このバージョンでは、テキストを最大2回検索します。開始文字列の前にのみ発生する終了文字列、つまり、を検索するときにOscarのバージョンによってスローされる例外を回避しますgetBetween(text, "my", "and");

使用法は同じです:

string text = "This is an example string and my data is here";
string data = getBetween(text, "my", "is");
于 2016-09-09T13:26:21.720 に答える
4

次のようにコンパクトに実行できます。

string abc = abc.Replace(abc.Substring(abc.IndexOf("me"), (abc.IndexOf("is", abc.IndexOf("me")) + 1) - abc.IndexOf("size")), string.Empty);
于 2015-03-11T06:02:26.937 に答える
4

@Prashantの回答を除いて、上記の回答は正しく回答されていません。答えの「置換」機能はどこにありますか?OPは、「その後、それと他の何かの間に新しい文字列を作成したい」と尋ねました。

@Oscarの優れた応答に基づいて、私は彼の機能を"Search And Replace"1つの機能に拡張しました。

@Prashantの答えは、置き換えを行うので、OPによって受け入れられた答えであるはずだったと思います。

とにかく、私は自分のバリアントを呼び出しました- 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;
    }
}
于 2016-08-24T01:27:24.977 に答える
3
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();
    }
于 2013-12-19T04:41:37.933 に答える
3
  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);


        }
于 2016-09-02T01:17:09.017 に答える
3
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();
        }


    }












        }
于 2016-09-30T17:34:37.303 に答える
2

これは、文字列内のテキストの一部を置き換える正しい方法です(Oscar JaraによるgetBetweenメソッドに基づく)。

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

3つのstring.Concat文字列を連結します。

  1. 置換する文字列の前の文字列ソース部分が見つかりました-strSource.Substring(0, Start)
  2. 置換文字列-strReplace
  3. 置換する文字列の後の文字列ソース部分が見つかりました-strSource.Substring(Start + strToReplace.Length, strSourceEnd - Start)
于 2018-12-20T17:47:29.737 に答える
0

「my」と「is」の間の文字列が常に必要であることがわかっている場合は、いつでも次の操作を実行できます。

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();
于 2012-05-22T20:45:52.703 に答える
0

最初にテキストのインデックスを見つけ、次に部分文字列を見つけます

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

        string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);
于 2018-05-06T19:06:33.030 に答える
0

次のコードを追加するだけです。

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

于 2019-03-05T08:01:47.080 に答える
0

ReplaceTextBetween()関数には別のアプローチがあります。

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;
        }
于 2021-02-08T05:42:52.530 に答える
0

事前定義された方法を使用せずに、ここで正解します。

    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();
    }
于 2021-07-13T22:30:57.140 に答える