Python中含数字的驼峰字符串转蛇形字符串问题求助
驼峰式字符串转蛇形(含连续数字)的修复方案
问题分析
你提供的代码在处理连续数字时会出现重复拼接的问题,比如输入last200Days时得到last_20_00_days,原因是遍历数字时会重复处理相邻的数字字符,同时多分支逻辑存在执行冲突,导致输出异常。
最优解决方案:正则表达式实现
使用正则表达式可以精准匹配需要分隔的位置,代码简洁且不易出错:
import re def format_string_case(string): # 将大写字母替换为「_小写字母」 temp_str = re.sub(r'([A-Z])', r'_\1', string).lower() # 在字母与数字之间添加下划线 temp_str = re.sub(r'([a-z])(\d)', r'\1_\2', temp_str) final_str = re.sub(r'(\d)([a-z])', r'\1_\2', temp_str) return final_str
测试验证
- 输入:
last20Days→ 输出:last_20_days - 输入:
last200Days→ 输出:last_200_days - 输入:
First100TestCases→ 输出:first_100_test_cases
原代码问题修复(遍历实现)
如果不想使用正则,可通过遍历处理连续数字块来修复逻辑:
def format_string_case(string): res = [] i = 0 str_len = len(string) while i < str_len: current_char = string[i] # 处理大写字母:转小写并前置下划线 if current_char.isupper(): res.append('_') res.append(current_char.lower()) i += 1 # 处理连续数字块 elif current_char.isnumeric(): start_idx = i # 找到所有连续的数字 while i < str_len and string[i].isnumeric(): i += 1 num_block = string[start_idx:i] # 数字块前是字母时,添加下划线 if start_idx > 0 and string[start_idx-1].isalpha(): res.append('_') res.append(num_block) # 数字块后是小写字母时,添加下划线 if i < str_len and string[i].islower(): res.append('_') # 处理小写字母:直接添加 else: res.append(current_char) i += 1 # 移除可能出现在开头的下划线 return ''.join(res).lstrip('_')
内容的提问来源于stack exchange,提问作者amadeu joaquim
相关产品推荐
相关产品推荐

