Ниже приведен стандарт BigQuery. SQL
Самый простой способ - использовать функцию SPLIT, как в примере ниже
SELECT SPLIT(col, '-')[SAFE_OFFSET(3)] AS newcol
Если по какой-то причине вы хотите go с обычным выражение - вы можете использовать REGEXP_EXTRACT, как в примере ниже
REGEXP_EXTRACT(col, r'(?:[^-]*-){3}([^-]+)') AS newcol
Вы можете протестировать, поиграть с обоими указанными выше подходами, используя образцы данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'ABC-123-aaa-INEEDTHIS-2000-BBB-123-CCC' col UNION ALL
SELECT '111-AAAAA-bb-INEEDTHIS-BB-435-A'
)
SELECT
col,
SPLIT(col, '-')[SAFE_OFFSET(3)] AS newcol_with_split,
REGEXP_EXTRACT(col, r'(?:[^-]*-){3}([^-]+)') AS newcol_with_regexp
FROM `project.dataset.table`
с выходом
Row col newcol_with_split newcol_with_regexp
1 ABC-123-aaa-INEEDTHIS-2000-BBB-123-CCC INEEDTHIS INEEDTHIS
2 111-AAAAA-bb-INEEDTHIS-BB-435-A INEEDTHIS INEEDTHIS
Краткое объяснение регулярного выражения
[^-]*-
захватывает такие записи, как ABC-
, 123-
, aaa- et c. (?:[^-]*-)
гарантирует, что эти записи не будут извлечены (?:[^-]*-){3}
гарантирует, что первые три таких записи будут пропущены - Наконец,
([^-]+)
извлекает целевой фрагмент до следующего -