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
相关产品推荐
相关产品推荐

