Использование регулярных выражений для извлечения названия продукта из URL с помощью Google BigQuery

#regex #google-bigquery

#регулярное выражение #google-bigquery

Вопрос:

Я пытаюсь извлечь названия продуктов из приведенных ниже URL-адресов, используя регулярное выражение в Google BigQuery:

https://www.example.com/en/uk/product/clothing/trousers-leggings/cool-grey-joggers-9800977

Название продукта должно быть: cool-grey-joggers

https://www.example.com/en/uk/product/hot-denim-dress-7842666

Название продукта должно быть: hot-denim-dress

Я попробовал использовать следующее регулярное выражение:

 '/product/(. )-[0-9] 

но это, кажется, жадное сопоставление и вернет:

 clothing/trousers-leggings/cool-grey-joggers  

 hot-denim-dress  

Я перепробовал множество вариантов вышеперечисленного, но все они либо ничего не соответствуют, либо захватывают слишком много.

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


Ответ №1:

If /product/ должен быть частью пути:

 /product/(?:[^/] /)*([^/] )-[0-9] $
 

Шаблон соответствует:

  • /product/ Совпадение буквально
  • (?:[^/] /)* При необходимости повторите совпадающие части, которые заканчиваются на /
  • ([^/] ) Захват группы 1, сопоставление 1 вхождений любого символа, кроме /
  • -[0-9] $ Совпадение - и 1 цифры до конца строки

Демонстрация регулярных выражений

Ответ №2:

Попробуйте это:

 SELECT REGEXP_EXTRACT('https://www.example.com/en/uk/product/clothing/trousers-leggings/cool-grey-joggers-9800977', r'([^/] )-[0-9] 

введите описание изображения здесь


но это, кажется, жадное сопоставление и вернет:

clothing/trousers-leggings/cool-grey-joggers

hot-denim-dress

Я перепробовал множество вариантов вышеперечисленного, но все они либо ничего не соответствуют, либо захватывают слишком много.

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

Ответ №1:

If /product/ должен быть частью пути:


Шаблон соответствует:

  • /product/ Совпадение буквально
  • (?:[^/] /)* При необходимости повторите совпадающие части, которые заканчиваются на /
  • ([^/] ) Захват группы 1, сопоставление 1 вхождений любого символа, кроме /
  • -[0-9] $ Совпадение - и 1 цифры до конца строки

Демонстрация регулярных выражений

Ответ №2:

Попробуйте это:


введите описание изображения здесь

)
UNION ALL
SELECT REGEXP_EXTRACT('https://www.example.com/en/uk/product/hot-denim-dress-7842666', r'([^/] )-[0-9]введите описание изображения здесь


но это, кажется, жадное сопоставление и вернет:

clothing/trousers-leggings/cool-grey-joggers

hot-denim-dress

Я перепробовал множество вариантов вышеперечисленного, но все они либо ничего не соответствуют, либо захватывают слишком много.

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

Ответ №1:

If /product/ должен быть частью пути:


Шаблон соответствует:

  • /product/ Совпадение буквально
  • (?:[^/] /)* При необходимости повторите совпадающие части, которые заканчиваются на /
  • ([^/] ) Захват группы 1, сопоставление 1 вхождений любого символа, кроме /
  • -[0-9] $ Совпадение - и 1 цифры до конца строки

Демонстрация регулярных выражений

Ответ №2:

Попробуйте это:


введите описание изображения здесь

)введите описание изображения здесь

но это, кажется, жадное сопоставление и вернет:

clothing/trousers-leggings/cool-grey-joggers

hot-denim-dress

Я перепробовал множество вариантов вышеперечисленного, но все они либо ничего не соответствуют, либо захватывают слишком много.

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

Ответ №1:

If /product/ должен быть частью пути:


Шаблон соответствует:

  • /product/ Совпадение буквально
  • (?:[^/] /)* При необходимости повторите совпадающие части, которые заканчиваются на /
  • ([^/] ) Захват группы 1, сопоставление 1 вхождений любого символа, кроме /
  • -[0-9] $ Совпадение - и 1 цифры до конца строки

Демонстрация регулярных выражений

Ответ №2:

Попробуйте это:


введите описание изображения здесь