#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 цифры до конца строки