Брать random количество совпадений regex

Prena

Новичок
Регистрация
26.11.2017
Сообщения
29
Благодарностей
1
Баллы
3
Подскажите пожалуйста, как взять случайное количество данных совпадений
Что прописать в строке "Что брать" как правильно написать random...
Или может есть решение через c#

 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 387
Баллы
113
Вот, накидал но не проверял.
C#:
var result = project.Lists["result_list"]; //вместо result_list название списка, в который добавлять
string dom = project.ExecuteMacro(project.Variables["DOM"].Value); //вместо DOM название переменной, где осуществляется поиск
Random r = new Random();
int kol_str = r.Next(10, 20);
int num_str = 0;
List <string> list = new List <string>();
list.AddRange(Macros.TextProcessing.Regex(dom, @"(?<=<a\ href="").*(?="">)").Select(g => g.FirstOrDefault()));
do{
    num_str.Next(0,list.Count);
    result.Add(list[num_str]);
    list.RemoveAt(num_str);
}while(result.Count < kol_str);
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 387
Баллы
113
Вот, накидал но не проверял.
C#:
var result = project.Lists["result_list"]; //вместо result_list название списка, в который добавлять
string dom = project.ExecuteMacro(project.Variables["DOM"].Value); //вместо DOM название переменной, где осуществляется поиск
List <string> list = new List <string>();
list.AddRange(Macros.TextProcessing.Regex(dom, @"(?<=<a\ href="").*(?="">)").Select(g => g.FirstOrDefault()));
Random r = new Random();
int kol_str = r.Next(0, list.Count);
int num_str = 0;
if(kol_str < list.Count){
do{
    num_str.Next(0,list.Count);
    result.Add(list[num_str]);
    list.RemoveAt(num_str);
}while(result.Count < kol_str);
}
else result.AddRange(list);
доработал немного так, чтобы всегда поиск происходил в существующем диапазоне.
Итого: берет рандомное количество рандомных ссылок.
 
  • Спасибо
Реакции: Prena

Prena

Новичок
Регистрация
26.11.2017
Сообщения
29
Благодарностей
1
Баллы
3
Тип Время Сообщение
13:48:18 Компиляция кода Ошибка в действии "CS1061" "'int' does not contain a definition for 'Next' and no extension method 'Next' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)". [Строка: 8; Cтолбец: 13]

парсю с {-Page.Dom-}
 

Prena

Новичок
Регистрация
26.11.2017
Сообщения
29
Благодарностей
1
Баллы
3
диапазон был для примера, можно его задавать? :-)

Тип Время Сообщение
13:52:27 Компиляция кода Ошибка в действии "CS1024" "Preprocessor directive expected". [Строка: 0; Cтолбец: 2]
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 516
Благодарностей
8 703
Баллы
113
Подскажите пожалуйста, как взять случайное количество данных совпадений
Что прописать в строке "Что брать" как правильно написать random...
По прописыванию диапазонов можно почитать в справке: https://zennolab.com/wiki/ru:ranges
На скриншоте у вас правильно прописано.
 

Prena

Новичок
Регистрация
26.11.2017
Сообщения
29
Благодарностей
1
Баллы
3
но берет почему-то не 10 ссылок а 400 из 1000 что-то значит не так...

udt: ага разобрался, Random50(10-end)....но оно почему-то каждый раз дописывает одно и тоже и + новые спаршенные...
помогла очистка списка после каждого парсинга.
 
Последнее редактирование:

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 387
Баллы
113
вот, заставил меня проверять
C#:
var result = project.Lists["result_list"];
result.Clear();
//string dom = project.ExecuteMacro(project.Variables["DOM"].Value);
string dom = project.ExecuteMacro(instance.ActiveTab.DomText);
int min = 5;
int max = 10;
List <string> list = new List <string>();
list.AddRange(Macros.TextProcessing.Regex(dom, @"(?<=<a\ href="").*?(?="")", "All").Select(g => g.FirstOrDefault()));
Random rand = new Random();
int kol_str = rand.Next(min, max);
int num_str = 0;
if(kol_str >= list.Count) result.AddRange(list);
else do{
    num_str = rand.Next(0, list.Count);
    result.Add(list[num_str]);
    list.RemoveAt(num_str);
}while(result.Count < kol_str);
 
  • Спасибо
Реакции: Prena

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