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

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
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();
 

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
272
Баллы
63
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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
надо обернуть в попытку

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=""}
 

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
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;
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
надо обернуть в попытку
Лучше написать с нормальной проверкой, чем постоянно генерить исключение.

Я примерно понимаю в чем проблема, код пытается взять несущесвтующий элемент, но как дать ему понять что все ок....
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

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
Лучше написать с нормальной проверкой, чем постоянно генерить исключение.


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;
}

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

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113

photograph

Client
Регистрация
04.09.2015
Сообщения
11
Благодарностей
4
Баллы
3
решено
 
Последнее редактирование:

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