Страница 2 из 8

Re: Регулярные выражения

Добавлено: 25 фев 2012 20:20
Ixenon
Изучаю. Пока читаю Джеффри филда, Регулярные выражения. Третье издание.
Вот только изучение данное, мне ни сколько не поможет понять принцип работы системы замены наименования, с учетом использования регулярных выражений, т.к. тут все не от регулярных выражений зависит, а от того, как это в данной программе реализовано. В этих регулярных выражениях в общем и целом сложного ничего нет. Все сложности обычно связаны с тем как работа с регулярными выражениями реализована в той или иной программе. А на эту тему в документации по PLI информация стремиться к нулю :-)
Вы мне напишите хоть пару примеров, использования регулярных выражений в поле "Заменить на", с кратким комментарием, того от куда информация выбирается, а дальше я сам попробую разобраться.

Кстати, на этой http://msdn.microsoft.com/ru-ru/library/43k3181w.aspx странице, написано, как то, о чем я писал постом ранее, используется в JScript.

Re: Регулярные выражения

Добавлено: 26 фев 2012 13:07
Ixenon
Я все таки нашел, в чем проблема, но не смог понят с чем это связано.
Вероятно проблема в том, что я чего то недопонимаю, просьба помочь с этим разобраться.
Из основной базы, я сделал экспорт в формате "Выгрузка на сайт в формате E-Trade Series (внеш. модуль)"
Для выгрузки выбрал категорию мониторы.
Создал новую базу.
Импортировал в нее получившийся при экспорте файл.
В новой базе получилась одна категория со всеми имеющимися в ней на данный момент мониторами.
Затем настроил импорт прайса.
Сопоставление везде установил только такое: "Поиск соответствия товаров: с использованием регулярных выражений для категорий товара"
Для категории товара "Мониторы" прописал следующее регулярное выражение: (\b[a-z]{1,2}[0-9]{4}\b) в программе выглядит так:
1.jpg
1.jpg (19.72 КБ) 18193 просмотра
Смысл его я понимаю так:
В начале слова должны присутствовать от одной до двух букв латинского алфавита от "a" до "z". Сразу за ними четыре любые цифры. Эти четыре цифры должны быть расположены в конце слова.
Затем я протестировал работу регулярного выражения. Результат получился таким:
2.jpg
2.jpg (98.49 КБ) 18193 просмотра
Затем выполнил принудительное сопоставление товаров СТУС и СТИПП, результат которого виден на следующей картинке:
3.jpg
3.jpg (129.74 КБ) 18193 просмотра
В итоге получилось, что во время теста результат выражения для товара "Монитор BENQ TFT 21.5" GL2240 LED Black 1920 x 1080(16:9),250 кд/м2,1000:1,VGA,DVI,Senseye 3"
получился такой:
GL2240
а для товара "Монитор BENQ TFT 21.5" GL2240M LED Black 1920 x 1080(16:9),250 кд/м2,1000:1,VGA,DVI,M/M", поле в котором должен отображаться результат пустое! Так в общем то и должно быть. А вот при сравнении товары сопоставляются неверно.
Уважаемые разработчики, огромная к Вам просьба помочь мне понять, почему так происходит.

Возможно все дело в метасимволе "\b", который исходя из описания синтаксиса регулярных выражений на этой странице http://msdn.microsoft.com/ru-ru/library/ae5bf541.aspx - обозначает границу слова. Возможно скобок где то каких то не хватает, и/или последовательность метасимволов неверная. Всю голову себе уже сломал. Помогите пожалуйста разобраться, на конкретном примере. Допустим есть регулярное выражение ([a-z]{1,2}[0-9]{3,4}) каким образом мне нужно его модифицировать, чтобы программа понимала его следующим образом:
1. [a-z]{1,2} - это расположено в начале слова, т.е. спереди стоит пробел или ничего.
2. [0-9]{3,4} - это располагается сразу за указанным, в пункте первом, и за этим стоит либо пробел, либо ничего(т.е. конец строки)

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

Кстати, результат тестирования верный.
4.jpg
4.jpg (55.69 КБ) 18193 просмотра

Re: Регулярные выражения

Добавлено: 27 фев 2012 09:01
support
Здравствуйте. Для второго товара GL2240M регулярное выражение не срабатывает:

Изображение

У Вас не прописано условие для данного товара, так как у Вас еще есть одна буква в конце, которая должна участвовать в результате рег. выражения.

Изображение

Используемое рег. выражение (\b[a-z]{1,2}[0-9]{4}[a-z]{1,2}\b)

Изображение

Re: Регулярные выражения

Добавлено: 27 фев 2012 10:03
Ixenon
Отлично!
Теперь вопрос следующий.
Если прописать всего одно регулярное выражение (\b[a-z]{1,2}[0-9]{4}\b)
Почему в этом случае сопоставление происходит неверно?

Под это регулярное выражение товар с буквой М на конце никаким образом не подпадает.
И если бы подпадал, тогда в результатах тестирования, это было бы явно видно.

Просьба объяснить почему так происходит.
Мне нужно понимать как это работает.

Я не понимаю, почему, если прописано регулярное выражение \b[a-z]{1,2}[0-9]{4}\b
и имеются товары в СТИПП
Монитор BENQ TFT 21.5" GL2240 LED Black 1920 x 1080(16:9),250 кд/м2,1000:1,VGA,DVI,Senseye 3
Монитор BENQ TFT 21.5" GL2240M LED Black 1920 x 1080(16:9),250 кд/м2,1000:1,VGA,DVI,M/M
и в СТУС
Монитор BenQ GL2240M черный
Монитор BenQ GL2240

при автоматическом сопоставлении товару из СТУС:
Монитор BenQ GL2240M черный
сопоставляется следующий товар из СТИПП:
Монитор BENQ TFT 21.5" GL2240 LED Black 1920 x 1080(16:9),250 кд/м2,1000:1,VGA,DVI,Senseye 3

определяются то они верно с помощью регулярного выражения
1.jpg
1.jpg (46.48 КБ) 18187 просмотров
а сопоставляются неверно
Вы мне можете объяснить с чем это связано?

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

На следующей картинке, видно и прописанное регулярное выражение, и результат
2.jpg
2.jpg (77.66 КБ) 18187 просмотров
серым цветом - не сопоставленные товары
черным - сопоставленные
если нажать правой кнопкой мыши, то видим следующее
3.jpg
3.jpg (112.96 КБ) 18187 просмотров
Из чего получается, что товар "Монитор BenQ GL2240M черный" из СТУС найден на основании регулярного выражения \b[a-z]{1,2}[0-9]{4}\b
Как такое может быть, если этот товар, не подпадает под это регулярное выражение?

Re: Регулярные выражения

Добавлено: 27 фев 2012 10:20
support
прикрепите прайс-лист пожалуйста.

Re: Регулярные выражения

Добавлено: 27 фев 2012 10:56
Ixenon
Прайс в архиве с базой данных, которая прикреплена к позапрошлому посту.
относительно корня получается SupplyPrices\айтион_1
на всякий случай прикрепил копию прайса к этому посту

Re: Регулярные выражения

Добавлено: 27 фев 2012 11:49
TechAdmin
Скорей всего проблема в том, что при сопоставлении товаров с использованием регулярных выражений, в наименовании товара ищется по "вхождению" (текст содержит) результат регулярного выражения, в данном примере ищется текст "GL2240" и "GL2240M" в товарах СТУС
regexp_test_resuls_for_GL2240_and_GL2240M.png
regexp_test_resuls_for_GL2240_and_GL2240M.png (29.51 КБ) 18186 просмотров

Re: Регулярные выражения

Добавлено: 27 фев 2012 12:41
TechAdmin
В новой версии программы добавим новый параметр настройки "При сопоставлении товаров на основании регулярных выражений поиск вести по словам (более точный поиск)", который будет по умолчанию включён.

Re: Регулярные выражения

Добавлено: 27 фев 2012 13:42
Ixenon
Понял, Вас! Спасибо за разъяснение.
Я думал, что регулярное выражение применяется, как к товару из СТИПП, так и к товару из СТУС, а затем происходит поиск по точному совпадению.
Получается, ошибочно думал.

В таком случае, у меня к Вам просьба помочь разобраться, почему привязка происходит неверно, даже если прописать регулярные выражения таким образом:
1.jpg
1.jpg (24.28 КБ) 18185 просмотров
Тестировал все на той же базе, архив которой прикреплен к позапрошлому посту.

Ранее я писал, что у меня все получилось, при сопоставлении с помощью такой последовательности регулярных выражений. Но пробовал я на другой базе в которой было всего 2 товара созданные вручную, на основании другого товара из СТИПП с последующей модификацией наименования. Меня терзают смутные сомненья, что получилось у меня тогда сопоставить, только потому, что в том случае товары в СТУС шли в другой последовательности, но я могу и ошибаться. В любом случае, даже при использовании вышеуказанных регулярных выражений товар сопоставляется неверно.

Товару "Монитор BenQ GL2240M черный" из СТУС
Сопоставляются оба товара "GL2240" и "GL2240M" из СТИПП
3.jpg
3.jpg (78.66 КБ) 18185 просмотров
Мне нужно добиться, чтобы в данном случае с помощью регулярных выражений вышеупомянутые товары сопоставились верно. Причем, чтобы это произошло именно в той тестовой базе. Все это мне нужно для того, чтобы использовать данный опыт в основной базе, в которой более 40 тыс. наименований и у многих товаров есть схожие ситуации.

В связи с этим прошу указать какие нужно использовать регулярные выражения и в какой последовательности, для получения верного результата.
Т.е. другими словами чтобы товар "GL2240" из СТУС сопоставился с товаром "GL2240" из СТИПП, и соответственно товар "GL2240M" из СТУС сопоставился с товаром "GL2240M" из СТИПП

С уважением и надеждой на понимание и помощь в решении этой задачи.

Re: Регулярные выражения

Добавлено: 27 фев 2012 14:15
TechAdmin
Вам необходимо, чтобы производился поиск по "словам" в наименовании товара, тогда товары будут правильно сопоставляться, а сейчас поиск ведётся по вхождению слова "GL2240", это слово есть в наименовании "Монитор BenQ GL2240M черный" из СТУС, поэтому с ним происходит сопоставление товара "BenQ GL2240 Black" из СТИПП.
Я думал, что регулярное выражение применяется, как к товару из СТИПП, так и к товару из СТУС, а затем происходит поиск по точному совпадению.
Получается, ошибочно думал.
На основании СТИПП рассчитываются регулярные выражения, затем на основании этих данных ведётся поиск товаров в СТУС (на данный момент по вхождению слова).