Python正则问题:如何让连续大写字母的驼峰转文本结果一致
解决驼峰命名转可读文本的连续大写拆分问题
修改后的函数如下:
import re from django.template import Library register = Library() @register.filter def load_human_key(key): """ 驼峰命名key转换为可读性更高的文本 return: 拆分后的可读文本 """ # 匹配大写字母开头的两种情况:单个大写+后续小写,或连续大写组 regex = re.findall(r'[A-Z][a-z]*|[A-Z]+', key) if regex: return " ".join(regex) return key
问题原因
原正则[A-Z][^A-Z]*的逻辑是"匹配一个大写字母,加上后面所有非大写字符",遇到连续大写(如KEY)时,每个大写字母后没有非大写字符,会被拆分为单个的K、E、Y,导致不符合预期的结果。
新正则说明
新正则包含两种匹配规则:
[A-Z][a-z]*:匹配以单个大写字母开头,后续跟随任意数量小写字母的片段(如Json、Key)[A-Z]+:匹配连续的大写字母组合(如KEY、HTTP)
这样调用load_human_key("JsonKey")会返回Json Key,调用load_human_key("JsonKEY")会返回Json KEY,满足基础需求。
如果需要让两种输入返回完全一致的Json Key(即把连续大写转为首字母大写、其余小写),可以修改拼接逻辑:
if regex: return " ".join(part.capitalize() if len(part) > 1 else part for part in regex)
内容的提问来源于stack exchange,提问作者micho
相关产品推荐
相关产品推荐

