одна строка регулярное выражение не зависит от количества элементов - PullRequest
0 голосов
/ 01 февраля 2019

Могу ли я иметь однострочный код регулярного выражения, который соответствует значениям между линией конвейера "|"не зависит от количества предметов между трубопроводами.Например, у меня есть следующее регулярное выражение:

^(.*?)\|(.*?)\|(.*?)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)$

, которое работает только при наличии 12 элементов.Как я могу сделать то же самое, например, для 6 предметов?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Для Adobe Classification Rule Builder (CRB) нет способа написать регулярное выражение, которое будет соответствовать произвольному номеру вашего шаблона, и перенести их в $n группу захвата.Большинство движков регулярных выражений не допускают этого, хотя некоторые языки предлагают определенные способы более или менее эффективно делать это как возвращаемые массивы или что-то еще.Но CRB не предлагает такого рода вещи.

Но в любом случае, в общем-то, бессмысленно этого хотеть, так как нет ничего вверх или вниз по течению, которое действительно динамически / автоматически приспосабливалось бы к такого рода вещам в любом случае.

Например, в интерфейсе CRB нет способа динамически заполнить выходное значение произвольным значением $1$2$3[$n..], а также нет способа динамически генерировать произвольное количество правил в наборе правил.

Кроме того, Adobe Analytics (AA) не предлагает произвольную генерацию столбцов классификации на лету (если только вы не хотите написать скрипт с использованием Classification API, но вы не можете сказать то же самое для CRBв любом случае).

Например, если у вас есть

s.eVar1='foo1|foo2';

И вы хотите классифицировать это по 2 столбцам / отчетам классификации, вы должны пойти и создать их в интерфейсе классификации,А затем, скажем, ваше следующее отправленное значение:

s.eVar1='foo1|foo2|foo3';

Ну, АА автоматически не создает новый уровень классификации для вас;Вы должны войти и добавить третий, и так далее.

Таким образом, в целом, даже несмотря на то, что невозможно возвратить произвольное количество захваченных групп $n в CRB, на самом деле нет необходимости в этом.

Возможно, это поможет, если вы объясните, что вы на самом деле пытаетесь сделать в целом?Например, какие отчеты вы ожидаете увидеть?

Одной из распространенных причин, по которым я вижу подобное «желание», является то, что кто-то хочет отслеживать такие вещи, как навигационные ссылки заголовка или крошки, которые имеют произвольную глубину.Таким образом, они помещают, например, хлебные крошки

Home > Electronics > Computers > Monitors > LED Monitors

... или что-то еще в eVar (но разделенные на части, основываясь на вашем вопросе), и затем они хотят разбить этов классифицированные столбцы.

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

Обычно для подобного сценария лучше всего смотреть на необработанные данные и видеть, сколько уровней в среднем представляет объем ваших данных.Например, если вы посмотрите на свой необработанный отчет eVar и увидите, что в значениях можно найти более 5 или 6 уровней, но вы также можете увидеть, что большинство значений в среднем находятся между 1-3 уровнями, тогда выследует создать 4 столбца классификации.Первые 3 классификации представляют первые 3 уровня, а 4-й будет иметь все остальное.

Итак, возвращаясь к примеру значения:

Home|Electronics|Computers|Monitors|LED Monitors

Вы можете иметь:

Level1  => Home
Level2  => Electronics
Level3  => Computers
Level4+ => Monitors|LED Monitors

Затем вы настраиваете CRB с 4 правиламипо одному на каждый из уровней.И вы будете использовать одно и то же регулярное выражение во всех 4 строках правила:

^([^|]+)(?:\|([^|]+))?(?:\|([^|]+))?(?:\|(.+))?

, который вернет следующие захваченные группы для использования в выходных данных CRB:

$1 => Home
$2 => Electronics
$3 => Computers
$4 => Monitors|LED Monitors

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

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

Или в качестве альтернативы классификациям, рассмотрим одну из следующих альтернатив:

  1. Использовать опору списка
  2. Использовать переменную списка (например, list1)
  3. Используйте Merchandising eVar (синтаксис переменной продукта)

Это не совсем одно и то же, и у каждого из них есть свои предостережения, но вы не предоставили детали того, что вы в конечном итоге пытаетесь получить из отчетов, так что это может или не может быть то, что вы можете работатьс.

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

0 голосов
/ 01 февраля 2019
([^|]+)+

Это шаблон, который я использовал в прошлом для этой цели.Соответствует 1 или более группе, которая не содержит разделитель каналов.

...