1. 正则检测字符串是否有大写字母;
2. 如果有则将其转为小写形式并添加下划线,使用新字符替代原大写字符;
def turn_param_style(self, params: dict): ''' 将参数名的驼峰形式转为下划线形式 @param params: @return: ''' temp_dict = {} for name, value in params.items(): temp_name = "" if re.search("[A-Z]", name): capital_letters = re.findall("[A-Z]", name) for c in capital_letters: lower_c = c.lower() r_str = "_" + lower_c temp_name = name.replace(c, r_str) else: temp_name = name temp_dict.update({temp_name: value}) return temp_dict
其他的转换方法,这里没有将驼峰字符都转为小写形式
变成下划线的条件
①从第一个我们看不出什么,只知道都是小写
②从第二个我们得出信息:当前字母为大写,前一个字母为小写,需要在中间加入’_’
③从第三个我们得出信息:当前字母为大写,前一个字母也为大写,后一个字母为小写,需要在当前字母和前一个字母之间加上’ _ ’
④得到的输出全部为小写字母,这个我们看作次要因素,最后一起转为小写
def turn_param_style(self, params: dict): ''' 将参数名的驼峰形式转为下划线形式 @param params: @return: ''' temp_dict = {} for name, value in params.items(): new_name = "" name += " " # 为了防止数据溢出 for i in range(len(name) - 1): if i == 0: new_name += name[i] elif name[i].isupper() and name[i - 1].islower(): new_name += "_" + name[i] # 如果不在前面加上name += " ",这里会索引越界 elif name[i].isupper() and name[i - 1].isupper() and name[i + 1].islower(): new_name += "_" + name[i] else: new_name += name[i] temp_dict.update({new_name: value}) return temp_dict
参考: