【问题标题】:Regex to match the beginning from the end正则表达式从头到尾匹配
【发布时间】:2018-07-31 16:03:27
【问题描述】:
我试图想出一个从下面的第一个字符串中选择 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
谢谢
【问题讨论】:
标签:
regex
google-bigquery
【解决方案1】:
您可以将 REGEXP_EXTRACT 用作
SELECT REGEXP_EXTRACT(str, r'^(.*)(?:\|[^|]+){7}$')
注意:BigQuery Standard SQL 和 Legacy SQL 均提供此功能,但强烈建议使用 Standard SQL
以下示例适用于 BigQuery 标准 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
【解决方案2】:
试试这个模式来删除匹配的部分:([a-zA-Z0-9]+\|?){7}$。
Demo