正则表达式从头到尾匹配

Posted

技术标签:

【中文标题】正则表达式从头到尾匹配【英文标题】: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$ 【参考方案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

【讨论】:

以上是关于正则表达式从头到尾匹配的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

python3-正则表达式

Python 正则表达式

008-正则表达式

正则表达式

re模块正则表达式