You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LookML字段拆分:匹配含空格括号内容的正则写法求助

LookML括号内字段拆分正则方案

待处理字段场景

${user_role_name}字段目前存在两类取值格式:

  • 格式1:Managers (AE)
  • 格式2:Managers (AE - MM)

原有代码问题

原有仅适配格式1的代码通过空格做分隔符取末尾片段,碰到括号内容带空格的格式2时会截断内容,无法拿到完整括号内的值,原有代码如下:

sql: case
      when rlike (${user_role_name}, '^.*[\\(\\)].*$') then split_part(${user_role_name}, ' ', -1)

可直接复用的实现

不需要拆分多分支判断,直接用正则提取括号区间内的全部内容即可同时兼容两种格式,代码如下:

sql: REGEXP_EXTRACT(${user_role_name}, r'\\((.*?)\\)') ;;

正则\\((.*?)\\)的匹配逻辑为非贪婪捕获左括号(到第一个右括号)之间的所有字符,不受括号内空格、短横线影响:

  • 匹配格式1时返回结果:AE
  • 匹配格式2时返回结果:AE - MM

如果当前使用的SQL方言不支持非贪婪正则匹配,可使用case分支写法,新增正则匹配括号内含空格的场景,直接截取括号区间内容,避免按空格拆分导致的截断:

sql: case
    -- 匹配括号内容含空格的格式2
    when rlike(${user_role_name}, '\\([^)]*\\s[^)]*\\)') then TRIM(BOTH '()' FROM SUBSTRING_INDEX(SUBSTRING_INDEX(${user_role_name}, '(', -1), ')', 1))
    -- 兼容原有格式1逻辑
    when rlike (${user_role_name}, '^.*[\\(\\)].*$') then split_part(${user_role_name}, ' ', -1)
end ;;

其中分支判断用的正则\\([^)]*\\s[^)]*\\),作用是识别左括号到右括号之间存在空白字符的场景,精准命中格式2的取值特征。

内容的提问来源于stack exchange,提问作者Tyler Kraupp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:03:31