Индекс за пределами диапазона. Индекс должен быть положительным числом.....

irving zisman

Client
Регистрация
18.05.2017
Сообщения
232
Реакции
29
Баллы
28
Паршу тест регуляркой через C#, если текст не найден кубик выкидывает

"Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index"

Я примерно понимаю в чем проблема, код пытается взять несущесвтующий элемент, но как дать ему понять что все ок....

C#:
Развернуть Свернуть Копировать
string text = project.ExecuteMacro(project.Variables["var1"].Value);
project.Variables["var2"].Value = Macros.TextProcessing.Regex(text, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)", "0")[0].FirstOrDefault();
 
C#:
Развернуть Свернуть Копировать
project.Variables["var2"].Value = Regex.Match(text, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)").Value;
А в этой строке выполняется макрос?
C#:
Развернуть Свернуть Копировать
string text = project.ExecuteMacro(project.Variables["var1"].Value);
Или же просто присвоение значения, которое можно записать
C#:
Развернуть Свернуть Копировать
string text = project.Variables["var1"].Value;
?
 
  • Оценить
Реакции: irving zisman
надо обернуть в попытку

C#:
Развернуть Свернуть Копировать
try { project.Variables["var2"].Value = Macros.TextProcessing.Regex(text, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)", "0")[0].FirstOrDefault();} catch{project.Variables["var2"].Value=""}
 
C#:
Развернуть Свернуть Копировать
project.Variables["var2"].Value = Regex.Match(text, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)").Value;
А в этой строке выполняется макрос?
C#:
Развернуть Свернуть Копировать
string text = project.ExecuteMacro(project.Variables["var1"].Value);
Или же просто присвоение значения, которое можно записать
C#:
Развернуть Свернуть Копировать
string text = project.Variables["var1"].Value;
?

Просто присвоение значения.

Вот так работает, но важно что бы регуляркам взяла первое совпадение, а тут этого не указанно на сколько я понимаю

C#:
Развернуть Свернуть Копировать
string text2 = project.Variables["var1"].Value;
project.Variables["var2"].Value = Regex.Match(text2, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)").Value;
 
Последнее редактирование:
надо обернуть в попытку
Лучше написать с нормальной проверкой, чем постоянно генерить исключение.

Я примерно понимаю в чем проблема, код пытается взять несущесвтующий элемент, но как дать ему понять что все ок....
C#:
Развернуть Свернуть Копировать
string text = project.ExecuteMacro(project.Variables["var1"].Value);
Match m = Regex.Match(text, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)");
if(m.Success)
{
    project.Variables["var2"].Value = m.Value;
}
 
Последнее редактирование:
  • Оценить
Реакции: irving zisman
Лучше написать с нормальной проверкой, чем постоянно генерить исключение.


C#:
Развернуть Свернуть Копировать
string text = project.ExecuteMacro(project.Variables["var1"].Value);
Match m = Regex.Match(text, @"[a-zA-Z0-9_.]+(?<=[^\.])(?=[^a-zA-Z0-9_]+p>)|(?<=username=).*?(?=&amp)");
if(m.Success)
{
    project.Variables["var2"].Value = m.Value;
}


Спасибо, работает! Но тот же вопрос, в регулярке не указанно какое совпадение брать, она возьмет первое?
 
решено
 
Последнее редактирование:

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)