Programing

C #으로 문자열에서 텍스트 찾기

crosscheck 2020. 11. 19. 07:51
반응형

C #으로 문자열에서 텍스트 찾기


문자열 내에서 주어진 텍스트를 어떻게 찾을 수 있습니까? 그 후에 그와 다른 것 사이에 새로운 문자열을 만들고 싶습니다. 예를 들어 ...

문자열이 다음과 같으면

This is an example string and my data is here

그리고 "my"와 "is"사이에있는 문자열을 만들고 싶습니다. 어떻게 할 수 있습니까? 미안하지만 이것은 꽤 유사하지만 이해가 되길 바랍니다.


이 기능을 사용하십시오.

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

이것을 어떻게 사용 하는가:

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

이것은 가장 간단한 방법입니다.

if(str.Contains("hello"))

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

다음은 Oscar Jara의 기능을 모델로 사용하는 기능입니다.

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

이 버전은 텍스트를 최대 두 번 검색합니다. 시작 문자열 이전에만 발생하는 끝 문자열을 검색 할 때 Oscar 버전에서 throw되는 예외를 방지합니다 getBetween(text, "my", "and");.

사용법은 동일합니다.

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

다음과 같이 간결하게 할 수 있습니다.

string abc = abc.Replace(abc.Substring(abc.IndexOf("me"), (abc.IndexOf("is", abc.IndexOf("me")) + 1) - abc.IndexOf("size")), string.Empty);

@Prashant의 답변을 제외하고 위의 답변은 오답입니다. 답변의 "바꾸기"기능은 어디에 있습니까? OP는 "그 다음에는 저것과 다른 것 사이에 새로운 문자열을 만들고 싶습니다"라고 물었습니다.

@Oscar의 뛰어난 반응을 바탕으로 그의 기능을 "Search And Replace"하나 기능으로 확장했습니다 .

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

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

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


    }












        }

다음은 문자열 내부의 텍스트 부분을 바꾸는 올바른 방법입니다 (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;
        }
    }

string.Concat3 개 문자열을 연결 :

  1. 대체 할 문자열 앞의 문자열 소스 부분을 찾았습니다. strSource.Substring(0, Start)
  2. 대체 문자열- strReplace
  3. 대체 할 문자열 뒤의 문자열 소스 부분을 찾았습니다. 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:

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

참고URL : https://stackoverflow.com/questions/10709821/find-text-in-string-with-c-sharp

반응형