我正在尝试提出一个正则表达式,该正则表达式从下面的第一个字符串中选择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
谢谢
答案 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}$
。