BigQuery REGEX 获取 2 个字符之间的文本
BigQuery REGEX get text between 2 characters
来自这个字符串:
gs://analytics_models_from_g_rdd_ga/9g653798d-7e13-4238-55443-6db72ace9911$$$$events_today.csv
我正在尝试提取此文本:
9g653798d-7e13-4238-55443-6db72ace9911
并在单独的 REGEX 函数中 events_today
第一串的卷数:
- 字符串将始终以 $$$$ 结尾。
- 字符串将始终以 ga/ 开头。
- 可以更改提取的文本长度。
我缝了几个教程和红色正则表达式参考,但仍然没有成功
我认为解决方案是 /\s*(.*?)\s*$$$$
但不是。
一般来说,提取2个字符串之间的字符串
你可以使用
REGEXP_REPLACE(col, r".*ga/([^/$]*)${4}.*", r"")
参见regex demo。
相同,但稍微简化了,因为.*
会变得多余,pattern可以用在REGEGEXP_EXTRACT
:
REGEXP_EXTRACT(col, r"ga/([^/$]*)${4}")
图案详情:
.*
- 除换行字符外的任何零个或多个字符,尽可能多
ga/
- ga
和一个斜杠
([^/$]*)
- 第 1 组:除 /
和 $
之外的任何零个或多个字符
${4}
- 四个 $
符号
.*
- 除换行字符外的任何零个或多个字符,尽可能多。
替换为第 1 组反向引用
,它将整个匹配项替换为组的内容。
对于 BigQuery 标准 SQL
select regexp_extract(txt, r'ga/(.*?)${4}')
如果应用于您问题中的示例 - 输出是
来自这个字符串:
gs://analytics_models_from_g_rdd_ga/9g653798d-7e13-4238-55443-6db72ace9911$$$$events_today.csv
我正在尝试提取此文本:
9g653798d-7e13-4238-55443-6db72ace9911
并在单独的 REGEX 函数中 events_today
第一串的卷数:
- 字符串将始终以 $$$$ 结尾。
- 字符串将始终以 ga/ 开头。
- 可以更改提取的文本长度。
我缝了几个教程和红色正则表达式参考,但仍然没有成功
我认为解决方案是 /\s*(.*?)\s*$$$$
但不是。
一般来说,提取2个字符串之间的字符串
你可以使用
REGEXP_REPLACE(col, r".*ga/([^/$]*)${4}.*", r"")
参见regex demo。
相同,但稍微简化了,因为.*
会变得多余,pattern可以用在REGEGEXP_EXTRACT
:
REGEXP_EXTRACT(col, r"ga/([^/$]*)${4}")
图案详情:
.*
- 除换行字符外的任何零个或多个字符,尽可能多ga/
-ga
和一个斜杠([^/$]*)
- 第 1 组:除/
和$
之外的任何零个或多个字符
${4}
- 四个$
符号.*
- 除换行字符外的任何零个或多个字符,尽可能多。
替换为第 1 组反向引用 ,它将整个匹配项替换为组的内容。
对于 BigQuery 标准 SQL
select regexp_extract(txt, r'ga/(.*?)${4}')
如果应用于您问题中的示例 - 输出是