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

第一串的卷数:

  1. 字符串将始终以 $$$$ 结尾。
  2. 字符串将始终以 ga/ 开头。
  3. 可以更改提取的文本长度。

我缝了几个教程和红色正则表达式参考,但仍然没有成功 我认为解决方案是 /\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}')    

如果应用于您问题中的示例 - 输出是