BigQuery REGEX получить текст между двумя символами

Из этой строки:

gs://analytics_models_from_g_rdd_ga/9g653798d-7e13-4238-55443-6db72ace9911$$$$events_today.csv

Я пытаюсь извлечь этот текст:

9g653798d-7e13-4238-55443-6db72ace9911

и в отдельной функции REGEX events_today

Роллы для первой строки:

  1. Строка всегда будет заканчиваться на $$$$.
  2. Строка всегда будет начинаться с ga/.
  3. Длина извлеченного текста может быть изменена.

Я шью несколько руководств и красных ссылок на регулярные выражения, но все равно не получается. Я думал, что решение будет /\\s*(.*?)\\s*$$$$, но это не так.

В общем, чтобы извлечь строку между двумя строками


person idan    schedule 30.11.2020    source источник
comment
Знаки доллара имеют особое значение; они называются якорями. Вам нужно убежать от них вот так \\$\\$\\$\\$   -  person MonkeyZeus    schedule 30.11.2020


Ответы (2)


Вы можете использовать

REGEXP_REPLACE(col, r".*ga/([^/$]*)\${4}.*", r"\1")

См. демонстрацию регулярного выражения.

Идентичный, но немного упрощенный, так как .* станет лишним, шаблон можно использовать в REGEGEXP_EXTRACT:

REGEXP_EXTRACT(col, r"ga/([^/$]*)\${4}")

Детали узора:

  • .* - любые символы, равные нулю или более, кроме символов разрыва строки, как можно больше
  • ga/ - ga и косая черта
  • ([^/$]*) - Группа 1: любой ноль или более символов, кроме / и $
  • \${4} - четыре символа $
  • .* - любое количество символов, содержащих ноль или более символов, кроме символов разрыва строки, максимально возможное количество.

Заменой является обратная ссылка группы 1, \1, которая заменяет все совпадение содержимым группы.

person Wiktor Stribiżew    schedule 30.11.2020
comment
А за вторую строку REGEXP_REPLACE(_FILE_NAME, r".*ga/([^/$]*)\${4}(.*)\.csv", r"\2") СПАСИБО - person idan; 30.11.2020

для стандартного SQL BigQuery

select regexp_extract(txt, r'ga/(.*?)\${4}')    

если обратиться к образцу из вашего вопроса - вывод есть

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

person Mikhail Berlyant    schedule 30.11.2020
comment
Я получаю это 9g653798d-7e13-4238-55443-6db72ace9911$$$$events_today.csv - person idan; 30.11.2020
comment
похоже, что разметка SO скрыла \ char - я обновил ответ, чтобы исправить это - person Mikhail Berlyant; 30.11.2020