首页 > 解决方案 > 如何使用 Bigquery regexp_extract 提取字符串

问题描述

我试图解析的文本

文本:sometext herex0D 名称:Davidx0D 更多文本:x0D - value1x0D - 谷歌地图找到 x0D x0D 你做了什么:x0D - 我做了一些东西 x0D

我要提取的文本是后面的任何内容

你做了什么:

所以结果应该是

x0D - 我做了一些东西 x0D

这就是我所拥有的,但它并没有返回我想要的。

select REGEXP_EXTRACT('Text: sometext herex0D Name: Davidx0D some more text: x0D - value1x0D - google maps to find x0D x0D What you did: x0D - i did some stuff x0D', r"What you did:(.*)")

但是,如果您按原样运行它,它将返回正确的结果,因为我在查询中粘贴了字符串。但是,如果我用表中的列名替换字符串,那么它就不起作用了。我只得到

x0D

背部

标签: google-bigquery

解决方案


下面是 BigQuery 标准 SQL 的示例

#standardSQL
WITH `project.dataset.table` AS (
  SELECT ''''Text: sometext herex0D Name: Davidx0D some more text: x0D - value1x0D - google maps to find x0D x0D What you did: x0D
  i did some stuff x0D''' str
)
SELECT 
  REGEXP_EXTRACT(str, r"What you did:(.*)") result,
  SUBSTR(str, STRPOS(str, "What you did:") + LENGTH("What you did:")) adjusted_result
FROM `project.dataset.table`

Row     result      adjusted_result  
1       x0D         x0D i did some stuff x0D     

更新

因此,在您的表格中,您有带有新行的字符串,在正则表达式解析期间需要考虑

默认情况下.不匹配\n
要使其正常工作,您需要使用s如下 标志

#standardSQL
WITH `project.dataset.table` AS (
  SELECT ''''Text: sometext herex0D Name: Davidx0D some more text: x0D - value1x0D - google maps to find x0D x0D What you did: x0D
  i did some stuff x0D''' str
)
SELECT 
  REGEXP_EXTRACT(str, r"What you did:(.*)") result,
  REGEXP_EXTRACT(str, r"(?s)What you did:(.*)") multiline_result
FROM `project.dataset.table`    

结果

Row     result      multiline_result     
1       x0D         x0D i did some stuff x0D     

推荐阅读