Bigquery Regexp 从 2 种不同的模式中提取

Bigquery Regexp pull from 2 different patterns

我试图从我的 bigquery 数据中的 url 中提取产品搜索颜色,但是 url 格式在某一时刻发生了变化,所以我试图从两种不同的格式中提取它们。

第一个像/someproduct/color/blue/color/red,第二个像/someproduct/?colors=blue,red

在这两个例子中,这个人过滤了多种颜色,我希望提取的输出像 'blue,red' 一样,并且都在一列中。

我可以拉第一个:

REGEXP_EXTRACT_all(url,r'color/([A-Za-z]+)') 

第二个是:

REGEXP_EXTRACT(url,r'colors=(\w*,\w*)')

第一个产生一个数组,我不知道如何让所有输出显示为一行中的一个项目。一个人最多可以过滤 20 种颜色,因此在这两种 URL 类型中可以有很多重复。

第二个也可以使用一些改进,因为我必须为每个额外的过滤颜色添加一个额外的 \w*,,并且我有一个处理该问题的 case 语句,但我认为它不是最有效的处理方式。

考虑以下方法

select url, 
  coalesce(regexp_extract(url, r'colors=(\w*,\w*)'), array_to_string(regexp_extract_all(url,r'color/([A-Za-z]+)'), ',')) colors
from your_table     

如果应用于您问题中的示例数据 - 输出为