REGEX_EXTRACT_ALL 大查询

Posted

技术标签:

【中文标题】REGEX_EXTRACT_ALL 大查询【英文标题】:REGEX_EXTRACT_ALL Big Query 【发布时间】:2021-03-23 09:38:01 【问题描述】:

我写了一个在 Regex101 中工作的正则表达式,但在 BigQuery 中不起作用,我需要找出一个翻译来在 BQ 中运行它。

这是正则表达式:(?<=\()(.*?)(?=\;) 这是数据:(400.0; 10/26/2020; 12/13/2020;); (500.0; 12/21/2020; 01/31/2021;);

这会拉出400.0500.0

但是我收到一个错误

Cannot parse regular expression: invalid perl operator: (?<

我相信这是由于向后看,有人可以帮忙吗?

【问题讨论】:

您是否按照 BQ 的要求使用正斜杠字符来表示正则表达式 /(?&lt;=\()(.*?)(?=\;)/ 的边界? 【参考方案1】:

RE2 regex library 不支持环视。

在这种情况下,您实际上可以删除环视语法并使用

\((.*?);

或者,

\(([^;]*);
\(([0-9]+(?:\.[0-9]+)?);

也就是说,您需要使用带有与您需要提取的文本匹配的捕获组的正则表达式。

请参阅regex demo。

详情

\((.*?); - 一个 ( 字符,然后是除换行符之外的任何零个或多个字符,尽可能少地捕获到第 1 组,然后是 ; 字符 \(([^;]*); - 一个(,然后是除; 之外的任何零个或多个字符被捕获到第1 组,然后是; \(([0-9]+(?:\.[0-9]+)?); - 一个 ( 字符,然后是一个或多个数字,后跟一个可选的 .,一个或多个数字被捕获到第 1 组,然后是一个 ; 字符。

【讨论】:

如果我还想提取开始日期和结束日期?我已经添加: REGEXP_EXTRACT_ALL(IOBudgetSegment, r'\d*\/\d*\d*\/\d*') AS Dates 但是这只会将它们添加为另一列,我将如何添加“开始日期”和“结束日期?” @ChrisMorgan 您的意思是要将它们提取为单独的列吗? REGEXP_EXTRACT(IOBudgetSegment, r';\s+(\d2/\d2/\d4);') AS StartDateREGEXP_EXTRACT(IOBudgetSegment, r'(\d2/\d2/\d4);\)') AS EndDate 没错,我想要一个三列表,其中一个包含预算金额,一个包含开始日期,一个包含结束日期。但是,这两种预算都有自己的开始和结束日期。 对不起,我只是需要使用 REGEXP_EXTRACT_ALL 谢谢! @Wiktor Stribiżew 是否有一种方法可以将这些数据拉入一行,我正在尝试跨此运行一个 SELECT DISTINCT 函数,因为我在一个主行中有多行数据,所以它抛出了一个错误

以上是关于REGEX_EXTRACT_ALL 大查询的主要内容,如果未能解决你的问题,请参考以下文章

csharp 例如-CSHARP-GroupDocs.Text.Examples.CSharp-DocumentTextExtractor-ExtractTextFromPdfPortfolios.c

csharp 例如-CSHARP-GroupDocs.Text.Examples.CSharp-DocumentTextExtractor-ExtractTextFromPdfPortfolios.c

为子查询优化 Postgresql 查询

MySQL查询的While循环

有没有办法优化这个mysql查询?

使用时间戳链接工作表和查询