Bigquery 正则表达式在多个空格后提取数字

Posted

技术标签:

【中文标题】Bigquery 正则表达式在多个空格后提取数字【英文标题】:Bigquery regex extract digits after multiple spaces 【发布时间】:2021-07-27 07:04:44 【问题描述】:

您能否帮助使用以下示例行中的 regexp_extract 数字:

    11BARIIOTA0292DEBORAH(空格)OLLA(空格)JENNY(长多格)0000001242202173171(空格) 11SBADIOTA0300MICHELLE(空格)MARGARETE(长-多个空格)0040170225(空格) 11NITYIOTA0300SYAHLA(空格)RYAN(长多格)613821914423(空格)

进入:

    0000001642202173171 0040170225 613821914423

fyi:long-multiple 大约是 40-50 个空格

谢谢

【问题讨论】:

【参考方案1】:

考虑以下方法

select array_reverse(split(trim(col_name), ' '))[offset(0)]
from your_table         

如果应用于您问题中的样本数据 - 输出是

【讨论】:

什么是偏移量?顺便说一句,这很好用 ty 查看OFFSET and ORDINAL【参考方案2】:

对于以 1--多个空格结尾的行,“long-multiple-space”为 40-50 个空格。 以下是一些不同的匹配表达式,具体取决于您的需要... 匹配:^.* 40,50(\d+) +$ 替换:Group1 匹配:^[A-Z\d]+(?: [A-Z]+)1,2 40,50(\d+) +$ 替换:Group1 使用 regexp_extract,我认为语法看起来更像...regexp_extract(filename,'^.* 40,50(\d+) +$', 1)regexp_extract(filename,'^[A-Z\d]+(?: [A-Z]+)1,2 40,50(\d+) +$', 1) 1,2 匹配 1--2 个名称(如 Line1 上的 OLLA 和 JENNY)。 使用 1,9 匹配 1-9 个空格分隔的名称。 (对于 'long-multiple-spaces',与 40,50 相同)

【讨论】:

当名字大写时,我可以添加类似 (?: [a-zA-Z]+) 是吗? @Auffan 添加 a-z 也将匹配小写,但顶部表达式应该足够了。如果您需要非常具体,我只包括了较低的表达式。如果需要更具体,您可以在表达式中包含 IOTA,假设它在您的所有字符串中。【参考方案3】:

您可以将字符串转换为简单的空格分隔值,然后使用 regexp_extract 在该结果字符串之上提取数值。

select REGEXP_REPLACE(REGEXP_REPLACE("11BARIIOTA0292DEBORAH                  OLLA  JENNY                                                                                             0000001242202173171","  ",""),'[^0-9 ]','');

【讨论】:

以上是关于Bigquery 正则表达式在多个空格后提取数字的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:在 Google Bigquery 中提取正斜杠后的所有内容?

Bigquery 中数字+字母组合的正则表达式

使用正则表达式在双倍空格后提取整数

BigQuery 正则表达式提取

C#正则表达式怎样提取匹配到的数据???

需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式