【问题标题】:Regex match between the 4th and the 5th "_" [duplicate]第 4 个和第 5 个“_”之间的正则表达式匹配 [重复]
【发布时间】:2019-02-05 01:22:22
【问题描述】:

在 SQL (Bigquery) 中。

我想使用 regex_extract 函数并提取第 4 和第 5 个“_”之间的表达式

示例: 从这个表达式:

Bubble_ALLTIERS_30-65+_M_2%Payers100-500_AEO7D_29_1_EN

我想提取短语2%Payers100-500

谢谢。

【问题讨论】:

  • minimal reproducible example 的形式显示您尝试过的内容。供参考有regex101.com您可能还必须edit这个问题并解释限制和要求。是否总是有相同数量的下划线?人类如何挑选出你想要的部分?如果你不能向人类描述一般模式,你就不能向计算机描述。

标签: regex google-bigquery


【解决方案1】:

以下是 BigQuery 标准 SQL,在我看来是进行此类提取的最简单方法

SPLIT(phrase , '_')[SAFE_OFFSET(4)] 

你可以像下面的例子那样测试它

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Bubble_ALLTIERS_30-65+_M_2%Payers100-500_AEO7D_29_1_EN' phrase 
)
SELECT SPLIT(phrase , '_')[SAFE_OFFSET(4)] word 
FROM `project.dataset.table`

结果

Row word     
1   2%Payers100-500  

另一种选择是

REGEXP_EXTRACT_ALL(phrase, r'[^_]+')[SAFE_OFFSET(4)]

【讨论】:

  • 好主意。谢谢。
  • 如果您喜欢并且有帮助,请考虑对答案进行投票
【解决方案2】:

使用

^(?:[^_]*_){4}([^_]+)

a demo on regex101.com

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 2019-12-13
    • 2017-02-09
    • 2019-03-13
    • 2020-06-30
    • 1970-01-01
    • 2021-06-17
    • 2019-12-21
    • 1970-01-01
    相关资源
    最近更新 更多