Как говорили некоторые люди, проблема в том, что ваш код работает на очень специфических входных данных, это все из-за этого начала и конца.проблема в том, что ваш код стал очень длинным со многими индексами, сравнениями, подстроками, условиями и так далее.Чтобы избежать этого, я бы рекомендовал вам использовать регулярные выражения , с их помощью вы можете выразить то, что вам нужно, на специальном языке.
Вот пример, который решает вашу проблему с регулярными выражениями:
public static string getBetween(string source, string before, string after)
{
var regExp = new Regex(string.Format("{0}(?<needle>[^{0}{1}]+){1}",before,after));
var matches = regExp.Matches(source).Cast<Match>(). //here we use LINQ to
OrderBy(m => m.Groups["needle"].Value.Length). //find shortest string
Select(m => m.Groups["needle"].Value); //you can use foreach loop instead
return matches.FirstOrDefault();
}
Вся сложная часть - {0}(?<needle>[^{0}{1}]+){1}
, где 0 - перед строкой и 1 - после строки.Это выражение означает, что мы нашли строку, которая находится между 0 и 1, а также не содержит 0 и 1.
Надеюсь, это поможет.