RegEx - если потом еще - PullRequest
       84

RegEx - если потом еще

1 голос
/ 23 сентября 2019

Я пытаюсь выработать выражение регулярного выражения, но борюсь с условными выражениями.У меня есть список из 100 URL-адресов, которые выглядят следующим образом:

  1. / имя / что-то / детали / 55334
  2. / имя / страница / 1/2
  3. / имя / что-то другое / 34523
  4. / имя / страница / 1
  5. / имя / что-то / 553/1

Суть в том, что я хочу удалить всекогда число появляется отдельно от сценария, в котором последним перед номером является слово «страница».

1. /name/something/details/
2. /name/page/1/2
3. /name/somethingdifferent/
4. /name/page/1
5. /name/something

Я буду удалять его с помощью группировки контента Google Analytics или, возможно, с помощью DataStudio.Я уже удалил / name /, поэтому у меня есть:

1. /something/details/55334
2. /page/1/2
3. /somethingdifferent/34523
4. /page/1
5. /something/553/1

, но я хочу добавить другое правило и удалить цифры, чтобы получить:

1. /something/details/
2. /page/1/2
3. /somethingdifferent/
4. /page/1
5. /something

уже пробовал:

\(?(?=(page\/[0-9]+))(\2)|(\/\d+)

в соответствии с синтаксисом:

(?(?=condition))(IF)|(ELSE)

, но выделены все цифры после текста.

Спасибо за помощь.

sampak

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Один из вариантов может заключаться в том, чтобы не совпадать с пробелом или цифрой, но не совпадать с /page.

Затем сопоставить косую черту и цифры 1+, за которыми следует любой символ 0+, чтобы исключить это из результата.

^((?:(?!\/page)[^\d\s])*\/)\d.*

По частям

  • ^ Начало строки
  • ( Захват группа 1
    • (?: Группа без захвата
      • (?!\/page) Отрицательный прогноз, утверждающий, что прямо направо не является
      • [^\d\s] Соответствует любому символу, кроме цифры или пробела
    • )* Закрыть группу без захвата и повторить 0+ раз
    • \/ Совпадение /
  • ) Закрыть группу 1
  • \d.* Соответствует цифре, за которой следует любой символ, кроме новой строки 0+ раз

При замене используйте первую группу захвата

Regex demo

Если вы также хотите удалить /name, вы можете использовать:

^\/name((?:(?!\/page)[^\d\s])*\/)\d.*

Regex demo

0 голосов
/ 23 сентября 2019

Попробуйте ^(\/page.*|[^0-9]*), работает с вашим примером.

A Версия вкл.имя: ^(page[\/\d]*|[^\d\s])*

...