正则表达式从头到尾匹配

时间:2018-07-31 16:03:27

标签: regex google-bigquery

我正在尝试提出一个正则表达式,该正则表达式从下面的第一个字符串中选择A | B | C。困难在于,它并不总是3个值,而我所知道的唯一静态信息是,我想选择||的第7次出现后剩下的所有值。从头开始。

A|B|C|Lion|Zebra|Date|Whatever|Something|122|Scooby
A|Lion|Zebra|Date|Whatever|Something|122|Dooby
A|B|C|D|E|Lion|Zebra|Date|Whatever|Something|122|Doo

所以结果应该是:

A|B|C
A
A|B|C|D|E

谢谢

2 个答案:

答案 0 :(得分:2)

您可以将REGEXP_EXTRACT用作

    
SELECT REGEXP_EXTRACT(str, r'^(.*)(?:\|[^|]+){7}$')

注意:BigQuery标准SQL和旧版SQL均提供此功能,但强烈建议使用标准SQL

下面的示例适用于BigQuery Standard SQL,并使用问题中的伪数据

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'A|B|C|Lion|Zebra|Date|Whatever|Something|122|Scooby' str UNION ALL
  SELECT 'A|Lion|Zebra|Date|Whatever|Something|122|Dooby' UNION ALL
  SELECT 'A|B|C|D|E|Lion|Zebra|Date|Whatever|Something|122|Doo'
)
SELECT 
  REGEXP_EXTRACT(str, r'^(.*)(?:\|[^|]+){7}$') result
FROM `project.dataset.table`   

如预期的那样输出

Row result   
1   A|B|C    
2   A    
3   A|B|C|D|E    

答案 1 :(得分:0)

尝试使用此模式删除匹配的部分:([a-zA-Z0-9]+\|?){7}$

Demo