У меня есть регулярное выражение, чтобы найти nth
вхождение символа в строку, вот код:
public static int NthIndexOf(this string target, string value, int n)
{
Match m = Regex.Match(target, "((" + value + ").*?){" + n + "}");
if (m.Success)
{
return m.Groups[2].Captures[n - 1].Index;
}
else
{
return -1;
}
}
Теперь у меня есть 1594 записи в этой строке с 1593 точками с запятой. Если я напишу:
tempstring.NthIndexOf(";", 1593)
Ответ возвращается немедленно и правильно. Если я дам что-нибудь за 1594, оно зависнет. Кто-нибудь знает, как это исправить?
Контрольный пример
string holder = "test;test2;test3";
string test = "";
for (int i = 0; i < 600; i++)
{
test += holder;
}
int index = test.NthIndexOf(";", 2000);
Это занимает очень много времени. Измените 600 на 6, и это очень быстро. Сделайте 2000 до 1700, и это очень быстро.
Почему мое регулярное выражение лица такое медленное?