Поиск в большом тексте

103
31 октября 2021, 15:40

Описание

Есть у меня большой текст и моя задача в том чтобы при вводе что-то в поле ввода программа начала искать совпадения с текстом и возвращала index совпадений.

Вот мой код -

public class MainMenu : MonoBehaviour
{
    [TextArea]
    public static string FullText;
    public List<int> MatchIndex;
    /*------------------------------ Functions ------------------------------*/
    public void FindText(string PartOfText)
    {
        if (!string.IsNullOrEmpty(PartOfText))
        {
            if (FullText.Contains(PartOfText))
            {
                MatchIndex.Add(FullText.IndexOf(PartOfText));
                Debug.Log("Есть совпадения.");
            }
            else
            {
                Debug.Log("Совпадения не найдены.");
            }
        }
    }
}

Но тут проблема в том что он находит только первое совпадение.

Вопрос

Как мне найти все совпадения?

Answer 1

Можно регуляркой.
Указываем пространство имён:

using System.Text.RegularExpressions;

Код:

var pattern = Regex.Escape(search);
var matches = Regex.Matches(input, pattern);
var indexes = matches.OfType<Match>().Select(m => m.Index).ToList();

input - текст, в котором ищем,
search - что ищем,
indexes - результат, список индексов.

Answer 2
public void FindText(string PartOfText)
{
    if (string.IsNullOrEmpty(PartOfText) || string.IsNullOrEmpty(FullText)) { return; }
    for (int i = FullText.IndexOf(PartOfText); i > -1; i = FullText.IndexOf(PartOfText, i + 1)){Debug.Log(i);}
}

И я бы засунул это всё дело в корутину с yield return в цикле.

READ ALSO
Валидаций двух и более обьектов в WPF (Validation WPF)

Валидаций двух и более обьектов в WPF (Validation WPF)

У меня в диалогом окне есть 5 элементов xaml texbox у каждый элемент имеет свою валидацию

123
Почему не работает код в VS

Почему не работает код в VS

Компилирую его стандартным компилятором NET который поставляется с фреймворкрм и все работает,раздел создается,а если компилировать из под...

213
Как разбить одномерный массив вида слово-перевод в двумерный? С#

Как разбить одномерный массив вида слово-перевод в двумерный? С#

Есть файл, в котором лежат строки вида "слово-перевод"Разделителем в данном случае работает "-"

201
Проблема с записью в текстовый файл из DataGridView

Проблема с записью в текстовый файл из DataGridView

Собственно, записывает в файл всё, кроме последней записи в строке DataGridView (получается 5, а должно быть 6)

203