Сопоставление регулярных выражений после двоеточия, но перед подчеркиванием

#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/1

2. @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;

Ответ №3:

Используйте


См. Доказательство регулярного выражения

Объяснение