Как перевести регулярки в сниппет?

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
Код:
var parse = project.Variables["var_listing"].Value;
var regex = new Regex(@"(?<=<td\ class=""b-table__cell\ b-table__cell_type_content"">).*?(?=</td>)");
var list = project.Lists["Буффер обмена"];
//
regex.Matches(parse).Cast<Match>().ToList().ForEach(m=>list.Add(m.Value));

// получаем список, в котором будем искать
var parserRegex = new Regex(@"(?i)(\W|^)(Вариант 1|Вариант 2|Вариант 3)(\W|$)"); // Вот регулярка на поиск чисел
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < list.Count; i++) // Пробегаемся по списку
    {
        if (parserRegex.IsMatch(list[i])) // Если регулярка срабатывает, то..
        {
            list.RemoveAt(i);
            return "no"; // Заменяем текущий элемент на цифру 1
        }
        return "yes";
    }
}
Вроде сниппет обрабатывается, но вот строки не нужные не удаляются
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
я вообще запутался, то в лист, то в таблицу, ты конкретно задачу вырази с примером и даными, тут никто не будет искать контент отдельно только для твоей регулярки
у тебя он и не отработает, ты выходишь из цикла при первом вхождении

http://zennolab.com/discussion/threads/besplatnye-snipety-na-zakaz.23450/page-4#post-183348
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
Я паршу страничку. Получаю гетзапросом содержимое страницы в переменную и уже потом с нее регулярками вытягиваю данные. Экшенами получается все сделать, но их очень много получается, поэтому на с#часть переношу

Основной код парсера
Код:
var table = project.Tables["Данные с параметрами"];
var var_listing = project.Variables["var_listing"].Value;

MatchCollection matches = Regex.Matches(var_listing, @"(?<=<td\ class=""b-table__cell\ b-table__cell_type_content"">).*?(?=</td>)"); //все элементы найденные regexp
lock (SyncObjects.ListSyncer)
{
    int rowCount = table.RowCount;
    for(int i = 0; i < matches.Count; i++)
    {
        table.SetCell("A", rowCount + i, matches[i].ToString());
    }
}
Но при парсинге попадает мусор, которой другой регуляркой отсеиваю (?i)(\W|^)(Вариант 1|Вариант 2|Вариант3)(\W|$)
И вот при парсинге в таблицу мне каким-то образом надо сделать проверку на наличие условия по второй регулярке. Если есть значения, встречающиеся в регуоярке, то их оставлять. остальные просто удалять.
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
Как вариант было бы проще написать общую регулярку и не заморачиваться.

Получается например такая структура
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
Вот как тут парсить каждый 3й <td></td>
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
зачем парсить мусор ?
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
вот и я не хочу его парсить =) но там не к чему прицепиться, чтобы выдернуть нужное значение
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
вот и я не хочу его парсить =) но там не к чему прицепиться, чтобы выдернуть нужное значение
если не к чему то как ты потом проверяешь что это 3-я ?
значит есть к чему
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
по первой регулярке парсится ровно 5 элементов и у каждого этого элемента одинаковый класс стиля
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
может можно как-то в регулярке какой именно мне по номеру нужен элимент?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
по первой регулярке парсится ровно 5 элементов и у каждого этого элемента одинаковый класс стиля
и всегда надо третью строку взять ?
ну так бери третью с листа остальное нах.
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
так в цикле они все повторяются =)
Например, чтобы понятно было выпарсеный список выглядит так
N/A
N/A
Вариант 1
198
0
N/A
N/A
Вариант 2
599
0
N/A
N/A
Вариант 1
189
0
N/A
N/A
Вариант 3
189
0

Поэтому мне и надо удалить строки. которые не удовлетворяют второй регулярке. Простым экшеном в зенке это просто сделать, а вот как в сниппете не пойму
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
<tr>
<td class="b-table__cell b-table__cell_type_content">N/A</td>
<td class="b-table__cell b-table__cell_type_content">N/A</td>
<td class="b-table__cell b-table__cell_type_content">Вариант 1</td>
<td class="b-table__cell b-table__cell_type_content">198</td>
<td class="b-table__cell b-table__cell_type_content">0</td>
</tr>
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
<tr>
<td class="b-table__cell b-table__cell_type_content">N/A</td>
<td class="b-table__cell b-table__cell_type_content">N/A</td>
<td class="b-table__cell b-table__cell_type_content">Вариант 1</td>
<td class="b-table__cell b-table__cell_type_content">198</td>
<td class="b-table__cell b-table__cell_type_content">0</td>
</tr>
"вариант 1" 2, 3, и т.д. там присутствует или ты от себя написал ?
если от себя значит ты ведь привязываешься к чему то, какие то ведь конкретные значения там стоят что ты вторую регулярку подобрал, пока ты не выложишь что там это только к Ванге идти ))
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
(?i)(\W|^)(101DOMAIN|ATEX|CC|DOMAINER|FE|OPENPROV|REALTIME|RELCOMHOST|STEPMEDIA|AAB|AXELNAME|CC-RTCOMM|DOMAINSHOP|NAUNET|PN|REGGI|RUCENTER|UNINIC|ACTIVE|BEELINE|CENTRALREG|DOMENUS|NETFOX|R01|REGRU|RUNET|WEBNAMES|ARDIS|BEGET|CETIS|DR|NETHOUSE|RD|REGTIME|SALENAMES)(\W|$)
вот вторая полная регулярка
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
вместо вариант 1 2 3 и т.д. находятся именно то, что есть в регулярке
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
вместо вариант 1 2 3 и т.д. находятся именно то, что есть в регулярке
C#:
var table = project.Tables["Данные с параметрами"];
var var_listing = project.Variables["var_listing"].Value;

MatchCollection matches = Regex.Matches(var_listing, @"(?<=<td\ class=""b-table__cell\ b-table__cell_type_content"">).*?(?=</td>)");

Regex reg = new Regex(@"(?i)(\W|^)(Вариант 1|Вариант 2|Вариант3)(\W|$)");

lock (SyncObjects.TableSyncer)
{
    for(int i = 0; i < matches.Count; i++)
    {
        int rowCount = table.RowCount;
      
        string str = matches[i].ToString();
        if (reg.IsMatch(str))
        {
            table.SetCell("A", rowCount, str);
        }
    }
}
 
Последнее редактирование:

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
Выдает ошибку последовательность действия не содержит соответствующий элемент
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
а где сам код
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
аааа =) извините

таже самая ошибка
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
всё работает, замени только на table.SetCell("A", rowCount, str); через строку записывало

2018-01-20_093130.png
 

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
У меня ошибка была в написании названия таблицы =) извиняюсь
Все круто - работает 100%

А не подскажите где можно почерпнуть знания по изучению языка под сниппеты
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
У меня ошибка была в написании названия таблицы =) извиняюсь
Все круто - работает 100%

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

Medvedoc

Client
Регистрация
01.04.2017
Сообщения
166
Благодарностей
10
Баллы
18
а статус как получить?
 

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