#regex
#регулярное выражение
Вопрос:
У меня есть две строки, ниже которых мне нужно применить функцию регулярного выражения в Google BigQuery с ее желаемыми результатами: Ввод:
MERCURE ENGAGEMENT_LaL_FB_TALENT:HENRIQUE_PORTUGAL_WEEK 4_IMAGE CAROUSEL_I19
MERCURE ENGAGEMENT_LaL_FB_UGC:_ENGLAND_TBC_WEEK 4_IMAGE CAROUSEL_I25
Вывод:
HENRIQUE
ENGLAND
Я не могу использовать обратный или положительный взгляд вперед в bigquery.
Самое близкое, что я получил, это следующее:
:D*
Которое соответствует слову после двоеточия, но перед пробелом.
Любые полезные идеи
Комментарии:
1.Вы могли бы использовать группу захвата
:_?([^s_] )
regex101.com/r/3fRZ1O/12. @Thefourthbird Позволяет ли это мне получить полное совпадение слова?
3. Из того, что я прочитал на этой странице , вы можете использовать REGEXP_EXTRACT, который вернет значение группы захвата, которое будет словом.
Ответ №1:
Вы также можете использовать группу захвата с помощью REGEXP_EXTRACT .
:_?([^s_] )
Объяснение
:_?
Совпадение:
и необязательный символ подчеркивания(
Группа захвата 1[^s_]
Сопоставьте 1 раз любой символ, кроме символа пробела или символа подчеркивания (опуститеs
, если между ними также могут быть пробелы)
)
Закрыть группу 1
Демонстрация регулярных выражений
Вы также можете исключить сопоставление символа подчеркивания с символом слова, что сужает диапазон допустимых символов.
:_?([^W_] )
Ответ №2:
Один из подходов использует REGEXP_REPLACE
:
SELECT REGEXP_REPLACE(col, r'^.*:_?([^_] )_.*
Ответ №3:
Используйте
REGEXP_EXTRACT("column_name", r":[^a-zA-Z]*([a-zA-Z] )")
См. Доказательство регулярного выражения
Объяснение
--------------------------------------------------------------------------------
: ':'
--------------------------------------------------------------------------------
[^a-zA-Z]* any character except: 'a' to 'z', 'A' to
'Z' (0 or more times (matching the most
amount possible))
--------------------------------------------------------------------------------
( group and capture to 1:
--------------------------------------------------------------------------------
[a-zA-Z] any character of: 'a' to 'z', 'A' to 'Z'
(1 or more times (matching the most
amount possible))
--------------------------------------------------------------------------------
) end of 1
, r'1') AS output
FROM yourTable;