[SOLVED] Проблема в понимании Regex c# или как сделать "вкусной регулярку"*?

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18
Код:
var dom = instance.ActiveTab.DomText;
string regex = "(?<=<span\\ class=\"price-value\">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(str1).Count > 0)
    project.Variables["money"].Value = reg.Matches(str1).ToString();
    return reg.Matches(str1).Count;
Код не кушает мою регулярку типа: (?<=<span\ class="price-value">)[\w\W]*(?=\ \ </span>\ </div>)
Как сделать её кошерной и правилен ли сам код? Нужно по итогу, чтобы прилетало значение в переменную проекта.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
покорми да крылья приделай ), может схавает да полетит )
 

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 223
Баллы
113
Код:
var dom = instance.ActiveTab.DomText;
string regex = "(?<=<span\\ class=\"price-value\">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(str1).Count > 0)
    project.Variables["money"].Value = reg.Matches(str1).ToString();
    return reg.Matches(str1).Count;
Код не кушает мою регулярку типа: (?<=<span\ class="price-value">)[\w\W]*(?=\ \ </span>\ </div>)
Как сделать её кошерной и правилен ли сам код? Нужно по итогу, чтобы прилетало значение в переменную проекта.
В сишарпе обычно экранируются слеши, бэкслеши и кавычки. И кавычки, порой лучше экранировать кавычками. Почитайте документацию.

Самый простой способ облегчить себе жизнь - поместить полученное в конструкторе регулярное выражение в поле Искомый текст всегда начинается с. Конструктор заэкранирует слеши и пробелы, останется только разобраться с кавычками.
 
Последнее редактирование:
  • Спасибо
Реакции: grin-du и Koqpe

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43
Код:
var dom = instance.ActiveTab.DomText;
string regex = "(?<=<span\\ class=\"price-value\">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(str1).Count > 0)
    project.Variables["money"].Value = reg.Matches(str1).ToString();
    return reg.Matches(str1).Count;
Код не кушает мою регулярку типа: (?<=<span\ class="price-value">)[\w\W]*(?=\ \ </span>\ </div>)
Как сделать её кошерной и правилен ли сам код? Нужно по итогу, чтобы прилетало значение в переменную проекта.
немного экранирования и регулярка работает)
PHP:
string regex = @"(?<=<span\\ class=\""price-value\"">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
хотя, может и не будет работать... надо проверить на готовом тексте. Сам код ошибки не выдает, но именно как регулярка может и не отработать
или такой вариант попробуй
PHP:
string regex = @"(?<=<span\ class=""price-value"">)[\w\W]*(?=\ \ </span>\ </div>)";
 
Последнее редактирование:

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18
немного экранирования и регулярка работает)
PHP:
string regex = @"(?<=<span\\ class=\""price-value\"">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
хотя, может и не будет работать... надо проверить на готовом тексте. Сам код ошибки не выдает, но именно как регулярка может и не отработать
или такой вариант попробуй
PHP:
string regex = @"(?<=<span\ class=""price-value"">)[\w\W]*(?=\ \ </span>\ </div>)";
Код выполняется вроде нормально, но выдает не значение, которое ищу, а 0.
 

Вложения

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18
а какая именно строка использовалась с регуляркой - первый вариант или второй?
Оба. У меня в коде идет парсит с дом по идее, но я объявил переменную, а к коде она дальше работает где-нибудь?
 

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18
а какая именно строка использовалась с регуляркой - первый вариант или второй?
Код:
var dom = instance.ActiveTab.DomText;
string regex = @"(?<=<span\\ class=\""price-value\"">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(dom).Count > 0)
    project.Variables["money"].Value = reg.Matches(dom).ToString();
    return reg.Matches(dom).Count;


    //str1 = str1.Replace("&nbsp;","").ToString().Trim();
    //project.Variables["money"].Value = str1;
попробовал еще так, но тоже 0 отдает.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Оба. У меня в коде идет парсит с дом по идее, но я объявил переменную, а к коде она дальше работает где-нибудь?
ну ты dom передай в переменую если надо для другого кубика
если только в этом куске кода то парсь с dom а не из переменой
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Code=csharp, в скобках
так надо и только в начале
 

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18
ну ты dom передай в переменую если надо для другого кубика
если только в этом куске кода то парсь с dom а не из переменой
C#:
var dom = instance.ActiveTab.DomText;
string regex = @"(?<=<span\\ class=\""price-value\"">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(dom).Count > 0)
    project.Variables["money"].Value = reg.Matches(dom).ToString();
    return reg.Matches(dom).Count;
Ну вот так? Если так то 0 отдает(
 

ssXXXss

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

приведи пример с чего парсишь, что тут гаданием заниматься
 
  • Спасибо
Реакции: grin-du

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18
регулярка по идеи не должна сработать, слэш перед кавычками не нужен, ты их уже экранировал кавычкой

приведи пример с чего парсишь, что тут гаданием заниматься
C#:
var dom = instance.ActiveTab.DomText;
string regex = @"(?<=<span\\ class=""price-value"">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(instance.ActiveTab.DomText).Count > 0)
    project.Variables["money"].Value = reg.Matches(instance.ActiveTab.DomText).ToString();
    return reg.Matches(instance.ActiveTab.DomText).Count;
Вот так попробовал, опять 0 отдает( Исходная регулярка (?<=<span\ class="price-value">)[\w\W]*(?=\ \ </span>\ </div>)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
[\\w\\W]* это не верно
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
C#:
var dom = instance.ActiveTab.DomText;
string regex = @"(?<=<span\\ class=""price-value"">)[\\w\\W]*(?=\\ \\ </span>\\ </div>)";
string str1 =  project.Variables["money"].Value;
var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
if(reg.Matches(instance.ActiveTab.DomText).Count > 0)
    project.Variables["money"].Value = reg.Matches(instance.ActiveTab.DomText).ToString();
    return reg.Matches(instance.ActiveTab.DomText).Count;
Вот так попробовал, опять 0 отдает( Исходная регулярка (?<=<span\ class="price-value">)[\w\W]*(?=\ \ </span>\ </div>)
не правильно, ты пример строки дай
 

ssXXXss

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

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43
да, пример DOM-страницы не помешал бы
 

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43
C#:
string regex = @"(?<=""price-value"">)[\w\W]*(?=\ \ </span>)";
такую регулярку попробуй
 

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43
  • Спасибо
Реакции: grin-du

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

grin-du

Client
Регистрация
09.10.2017
Сообщения
96
Благодарностей
46
Баллы
18

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
добавляешь using System.Net;

C#:
var dom = instance.ActiveTab.DomText;
dom = WebUtility.HtmlDecode(dom);

string regex = @"(?<=<span\ class=""price-value"">)[\w\W]*?(?=</span>)";

var reg = new Regex(regex,  RegexOptions.None);

if(reg.Matches(dom).Count > 0)
{
    project.Variables["money"].Value = reg.Match(dom).ToString().Replace("\r\n", "").Trim();
    return "es";
}

return reg.Matches(dom).Count;
 
  • Спасибо
Реакции: grin-du

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 857
Баллы
113
А точно искомое содержимое есть в "instance.ActiveTab.DomText"? А то я на память не помню - внутри там точно Dom, а не текстовое представление страницы без тегов?
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
185
Баллы
43
А точно искомое содержимое есть в "instance.ActiveTab.DomText"? А то я на память не помню - внутри там точно Dom, а не текстовое представление страницы без тегов?
у меня везде "instance.ActiveTab.DomText" такая конструкция используется. Вроде полноценный DOM получается.
 

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