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.0
和500.0
。
但是我收到一个错误
Cannot parse regular expression: invalid perl operator: (?<
我相信这是由于向后看,有人可以帮忙吗?
【问题讨论】:
您是否按照 BQ 的要求使用正斜杠字符来表示正则表达式/(?<=\()(.*?)(?=\;)/
的边界?
【参考方案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 StartDate
和 REGEXP_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