【问题标题】: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

谢谢

【问题讨论】:

  • 那么喜欢^(.*)(\|[^|]+){7}$

标签: 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多