Есть у меня большой текст и моя задача в том чтобы при вводе что-то в поле ввода программа начала искать совпадения с текстом и возвращала 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("Совпадения не найдены.");
}
}
}
}
Но тут проблема в том что он находит только первое совпадение.
Как мне найти все совпадения?
Можно регуляркой.
Указываем пространство имён:
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 - результат, список индексов.
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 в цикле.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости