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

Databricks中列内容Proper Case格式化代码的问题修正求助

问题

我正在尝试对存在多种错误输入的列内容进行Proper Case(首字母大写)格式化。当前使用的代码对大部分内容有效,但无法处理全大写的单词——这类单词会被代码在字母间插入空格(黄色标记部分为错误结果)。我不能使用lower(initcap(field)),因为这会破坏代码中的其他修正逻辑,请问有没有办法一次性解决所有问题?

现有代码逻辑

  • 将下划线和短横线替换为空格
  • 在所有大写字母前插入空格(处理无空格但含大写的多词内容)
  • 去除首尾空格
  • 对首字母仍为小写的单词进行首字母大写
  • 最后去除多余空格

当前代码

select old_name,regexp_replace(initcap(trim(regexp_replace(replace(replace(old_name,'_',' '),'-',' '), '([A-Z])', ' \$1')) ) , '\\s+', ' ') as fixed_name from mytable
解决方案

问题根源是原代码会给每一个大写字母前都插空格,全大写单词(比如HELLO)就会被拆成 H E L L O,后续处理后变成零散的单个大写字母。我们只需要调整正则匹配规则,只在小写字母紧跟大写字母的位置插入空格,既保留驼峰式内容的拆分逻辑,又不会破坏全大写单词。

修改后的代码:

select old_name,
       regexp_replace(
           initcap(
               trim(
                   regexp_replace(
                       replace(replace(old_name,'_',' '),'-',' '),
                       '([a-z])([A-Z])',
                       '\1 \2'
                   )
               )
           ),
           '\\s+', ' '
       ) as fixed_name 
from mytable

调整说明

  • 正则规则从'([A-Z])', ' \$1'改为'([a-z])([A-Z])', '\1 \2':仅在小写字母和大写字母的分界处插入空格,全大写单词内部没有小写字母,自然不会被拆分
  • 其余原有逻辑完全保留,确保下划线/短横线转空格、首尾去空格、首字母大写、合并多余空格这些功能正常工作

内容的提问来源于stack exchange,提问作者Lo Mc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:27:34