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 正则表达式在多个空格后提取数字的主要内容,如果未能解决你的问题,请参考以下文章