正则表达式从头到尾匹配
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
【讨论】:
以上是关于正则表达式从头到尾匹配的主要内容,如果未能解决你的问题,请参考以下文章