Ошибка при выполнении теста : Index and length must refer to a location within the string. (Parameter 'length')

Реализовал регулярное выражение , в которое входят коды стран. Далее , я ищу эти коды в тексте , после нахождения , я добавляю в лист полное название страны. Скорее всего я сделал костыль при нахождении кода. В шаблоне код передается в кавычках одинарных , а ключ в Dictionary естественно без(ключ это код, а значение это полное название , например US, США). Чтобы корректно вытащить значение по ключу , я убрал эти кавычки через Substring, он стал отображать в отладчике название страны , но при этом выдает ошибку: System.ArgumentOutOfRangeException : Index and length must refer to a location within the string. (Parameter 'length'

Как исправить ошибку ? В голову не приходит

Код (один из методов , который не проходит тест):

public List<string> Text_Regul(string text)
        {

            List<string> coun;

            Match m;

            string teamp;
           
            try
            {
                var list = GettingTextReg();

                string pattern = string.Format("\'({0})\'", string.Join("|", list.Keys));

                    coun = new List<string>();

                m = Regex.Match(text, pattern);
                int i=1;
                while (m.Success)
                {
                    Group g = m.Groups[i];
                    if (g.Length >= 2)
                    {


                        teamp = list[g.Value.Substring(1, 2)];// тут ошибка.

                        if (list.ContainsKey(teamp))
                        {
                            coun.Add(teamp);
                        }
                    }
                   i++;

                    m = m.NextMatch();
                }


            } catch(ArgumentNullException e)
            {

                throw new ArgumentNullException(e.Message);
            }

           return coun;
        }

Скриншот:

Тут название передается

Ошибка при отладке


Ответы (1 шт):

Автор решения: aepot

Вместо SubString для отрезания кавычек используйте Trim, потому что код страны не обязательно будет двухзначный, например "3". Конкретно в вашем случае непонятно, что содержит g.Value, возможно там строка длиной короче 3 символов, поэтому и исключение.

teamp = list[g.Value.Trim('"')];
→ Ссылка