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

