REGEXP_EXTRACT 在 Bigquery 中具有字符串值
REGEXP_EXTRACT with String Value in Bigquery
我想提取列中的单词,列值如下所示:'p-fr-youtube-car'。而且它们应该都被提取到它们自己的列中。
输入:
p-fr-youtube-car
期望输出:
Country = fr
Channel = youtube
Item = car
我在下面尝试提取第一个单词,但无法确定 rest.What RegEx 是否可以从此输入中获得我想要的输出?我怎样才能让它不区分大小写 fr 和 FR 将相同。
REGEXP_EXTRACT_ALL(CampaignName, r"^p-([a-z]*)") AS Country
您可以使用命名组。
正则表达式示例:
p-(?P<Country>[a-z]*)\-(?P<Channel>[a-z]*)\-(?P<Item>[a-z]*)$
https://regex101.com/r/fKoBIn/3
您可以使用 [^-]+
来匹配连字符之间的部分,并且只捕获您需要获取的内容。
要获取像 youtube
这样的字符串,您可以使用
REGEXP_EXTRACT_ALL(CampaignName, r'^p-[^-]+-([^-]+)')
要获取像 car
这样的字符串,您可以使用
REGEXP_EXTRACT_ALL(CampaignName, r'^p-[^-]+-[^-]+-([^-]+)')
所以,[^-]+
匹配除 -
之外的一个或多个字符,而 ([^-]+)
是用捕获组包装的相同模式,其内容 REGEXP_EXTRACT
实际上 returns 结果。
以下适用于 BigQuery 标准 SQL
我建议在像您这样的情况下使用 SPLIT
#standardSQL
SELECT CampaignName,
parts[SAFE_OFFSET(1)] AS Country,
parts[SAFE_OFFSET(2)] AS Channel,
parts[SAFE_OFFSET(3)] AS Item
FROM `project.dataset.table`,
UNNEST([STRUCT(SPLIT(CampaignName, '-') AS parts)])
如果应用于您问题中的示例数据 - 输出是
Row CampaignName Country Channel Item
1 p-fr-youtube-car fr youtube car
同时,如果出于某种原因您需要使用 Regexp - 您可以使用下面的方法
#standardSQL
SELECT CampaignName,
parts[SAFE_OFFSET(1)] AS Country,
parts[SAFE_OFFSET(2)] AS Channel,
parts[SAFE_OFFSET(3)] AS Item
FROM `project.dataset.table`,
UNNEST([STRUCT(REGEXP_EXTRACT_ALL(CampaignName, r'(?:^|-)([^-]*)') AS parts)])
我想提取列中的单词,列值如下所示:'p-fr-youtube-car'。而且它们应该都被提取到它们自己的列中。
输入:
p-fr-youtube-car
期望输出:
Country = fr
Channel = youtube
Item = car
我在下面尝试提取第一个单词,但无法确定 rest.What RegEx 是否可以从此输入中获得我想要的输出?我怎样才能让它不区分大小写 fr 和 FR 将相同。
REGEXP_EXTRACT_ALL(CampaignName, r"^p-([a-z]*)") AS Country
您可以使用命名组。
正则表达式示例:
p-(?P<Country>[a-z]*)\-(?P<Channel>[a-z]*)\-(?P<Item>[a-z]*)$
https://regex101.com/r/fKoBIn/3
您可以使用 [^-]+
来匹配连字符之间的部分,并且只捕获您需要获取的内容。
要获取像 youtube
这样的字符串,您可以使用
REGEXP_EXTRACT_ALL(CampaignName, r'^p-[^-]+-([^-]+)')
要获取像 car
这样的字符串,您可以使用
REGEXP_EXTRACT_ALL(CampaignName, r'^p-[^-]+-[^-]+-([^-]+)')
所以,[^-]+
匹配除 -
之外的一个或多个字符,而 ([^-]+)
是用捕获组包装的相同模式,其内容 REGEXP_EXTRACT
实际上 returns 结果。
以下适用于 BigQuery 标准 SQL
我建议在像您这样的情况下使用 SPLIT
#standardSQL
SELECT CampaignName,
parts[SAFE_OFFSET(1)] AS Country,
parts[SAFE_OFFSET(2)] AS Channel,
parts[SAFE_OFFSET(3)] AS Item
FROM `project.dataset.table`,
UNNEST([STRUCT(SPLIT(CampaignName, '-') AS parts)])
如果应用于您问题中的示例数据 - 输出是
Row CampaignName Country Channel Item
1 p-fr-youtube-car fr youtube car
同时,如果出于某种原因您需要使用 Regexp - 您可以使用下面的方法
#standardSQL
SELECT CampaignName,
parts[SAFE_OFFSET(1)] AS Country,
parts[SAFE_OFFSET(2)] AS Channel,
parts[SAFE_OFFSET(3)] AS Item
FROM `project.dataset.table`,
UNNEST([STRUCT(REGEXP_EXTRACT_ALL(CampaignName, r'(?:^|-)([^-]*)') AS parts)])