正则表达式在第一次和第二次出现斜线之后匹配所有内容

时间:2019-09-13 14:23:31

标签: regex google-bigquery

需要匹配字符串的第一个/直到第二个/或结尾之后的所有内容。给出以下示例:

/US
/CA
/DE/Special1
/FR/Special 1/special2

需要返回以下内容:

US
CA
DE
FR

曾在DataStudio中使用过此功能,

^(.+?)/

但是BigQuery中的相同之处只是返回null。在尝试了数十个其他示例之后,决定问自己。感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您的正则表达式在字符串的开头(直到第一个斜杠)与任何一个或多个字符尽可能少地匹配,并将此值放在组1中。然后它消耗/个字符。它实际上与您的需求不符。

您可以在BigQuery中使用一个正则表达式来部分匹配一个字符串,并捕获结果所需的部分:

/([^/]+)

它将与第一次出现的斜杠相匹配,后跟一个或多个除斜杠以外的字符,将捕获的子字符串放入您得到的结果中。

答案 1 :(得分:2)

对于这样简单的提取-考虑使用更便宜的字符串函数而不是更昂贵的正则表达式函数的替代方法。参见下面的示例

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '/US' line UNION ALL
  SELECT '/CA' UNION ALL
  SELECT '/DE/Special1' UNION ALL
  SELECT '/FR/Special 1/special2' 
)
SELECT line, SPLIT(line, '/')[SAFE_OFFSET(1)] value 
FROM `project.dataset.table`   

有结果

Row line                    value    
1   /US                     US   
2   /CA                     CA   
3   /DE/Special1            DE   
4   /FR/Special 1/special2  FR