从 Bigquery 中的 URL 中提取字符串

Posted

技术标签:

【中文标题】从 Bigquery 中的 URL 中提取字符串【英文标题】:Extract String from URL in Bigquery 【发布时间】:2020-09-25 09:14:31 【问题描述】:

我有几个 1.000 个 URL,想从 URL 参数中提取一些值。以下是数据库中的一些示例:

["//xxx.com/se/something?SE_ifmobile:MBifnotmobile:DT_A_B_C_D_E_F_G_H"] ["//www.xxx.com/se/car?p_color_car=White?SE_ifmobile:MBifnotmobile:DT_A_B_C_D_E_F_G_H"]

我想提取 SE |一个 |乙| C | D | E | F |克| H

我已经用 REGEXP_EXTRACT 试过了

REGEXP_EXTRACT_ALL(Url,r'(?:\?|&)(?:([^_]+)_(?:[^&]*))') as Country

问题是因为我有两个“?”结果为第一个 url 返回 SE,为第二个 url 返回 p。我怎样才能在一个正则表达式中解决这个问题,这样我才能得到第二个网址的 p 但实际 SE。

【问题讨论】:

【参考方案1】:

你可以使用

[?&]([^_]+)_[^&?]*$

请参阅regex demo。详情:

[?&] - ?& 字符 ([^_]+) - 第 1 组(实际输出字符串):除 _ 之外的一个或多个字符 _ - 一个 _ 字符 [^&?]* - 零个或多个 &? 字符 $ - 字符串结束。

【讨论】:

REGEXP_EXTRACT_ALL(Url, r'[?&]([^_]+)_[^&?]*$ as URL 这是这个想法吗?我收到关于未闭合字符串文字的错误。跨度> @user3052850 当然,关闭它,REGEXP_EXTRACT_ALL(Url, r'[?&]([^_]+)_[^&?]*$')

以上是关于从 Bigquery 中的 URL 中提取字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从bigquery中的字符串中提取子集

BigQuery REGEXP_EXTRACT from URL - 提取参数值

将数据从键值对提取到 Google Bigquery 中的列标题

bigquery 标准 sql = 从字符串中提取数据

从 BigQuery 数据 JSON 中的数组中提取索引值

从 BigQuery 中的 JSON 数组中提取多个值