Google bigquery 如何使用Bigquery regexp\u extract提取字符串

Google bigquery 如何使用Bigquery regexp\u extract提取字符串,google-bigquery,Google Bigquery,我试图解析的文本 Text:sometext herex0D Name:Davidx0D更多Text:x0D-value1x0D-googlemaps查找x0D x0D你做了什么:x0D-我做了一些事情x0D 我要提取的文本是后面的任何内容 你所做的: 所以结果应该是 我做了一些事情 这是我所拥有的,但它没有返回我想要的 选择REGEXP_EXTRACT('Text:sometext herex0D Name:Davidx0D更多文本:x0D-value1x0D-google maps以查找x0

我试图解析的文本

Text:sometext herex0D Name:Davidx0D更多Text:x0D-value1x0D-googlemaps查找x0D x0D你做了什么:x0D-我做了一些事情x0D

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

你所做的:

所以结果应该是

我做了一些事情

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

选择REGEXP_EXTRACT('Text:sometext herex0D Name:Davidx0D更多文本:x0D-value1x0D-google maps以查找x0D x0D您做了什么:x0D-i做了一些事情x0D',r“您做了什么:(.*))

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

x0D


返回下面的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     
更新

因此,在表中有新行字符串,在regexp解析期间需要考虑这些字符串

默认情况下,
不匹配
\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     

为我的专栏工作。和数据本身有关的东西-你们能比较一下输入字符串的长度和表中那个字符串的长度吗?长度相差2。使用列名得到的长度是2,所以我认为这是解决这个问题的关键。你能确定这些是什么吗?这将解释你们看到的效果,甚至更容易——见下面的我的答案见我答案中的更新