如何在Python中按大小写转换分割字符串?求无库实现方案
解决字符串按连续大小写分组的问题
我来帮你搞定这个问题!你原来的代码之所以得不到预期结果,是因为只处理了第一次大小写切换的位置,而且用split()会直接丢掉分隔符,逻辑上没法覆盖所有的分组场景。这里有个完全不用导入任何库的实现方案,逻辑清晰还能处理各种边界情况:
实现思路
核心就是跟踪当前分组的大小写状态,遍历字符串时,把相同大小写的字符归为一组;当遇到大小写切换的字符时,就把当前组存入结果列表,然后开启新的分组。
完整代码
def split_upp_low(string): # 先处理空字符串的边界情况 if not string: return [] result = [] # 初始化当前分组和分组的大小写状态 current_group = [string[0]] current_is_upper = string[0].isupper() # 从第二个字符开始遍历 for char in string[1:]: char_is_upper = char.isupper() if char_is_upper == current_is_upper: # 和当前分组状态一致,加入当前组 current_group.append(char) else: # 状态切换,把当前组转为字符串存入结果,开启新组 result.append(''.join(current_group)) current_group = [char] current_is_upper = char_is_upper # 循环结束后,别忘了把最后一个分组加入结果 result.append(''.join(current_group)) return result # 测试示例 string1 = "ABcdEFgh" print(split_upp_low(string1)) # 输出: ['AB', 'cd', 'EF', 'gh']
代码说明
- 边界处理:先判断输入字符串是否为空,避免后续索引错误
- 高效分组:用列表存储当前分组的字符(比字符串拼接更高效,因为字符串是不可变类型)
- 状态跟踪:用
current_is_upper记录当前分组的大小写状态,每次遍历字符时对比状态,决定是继续加入当前组还是开启新组 - 收尾处理:循环结束后必须把最后一个分组加入结果,因为循环里只有状态切换时才会存储分组,最后一组不会触发这个逻辑
额外测试用例
你可以试试这些场景,验证代码的鲁棒性:
- 单个字符:
split_upp_low("Z")→['Z'] - 全大写/全小写:
split_upp_low("HELLO")→['HELLO'];split_upp_low("hello")→['hello'] - 混合多段:
split_upp_low("PyThOnIsFuN")→['Py', 'Th', 'On', 'Is', 'Fu', 'N']
内容的提问来源于stack exchange,提问作者Mario Santoro
相关产品推荐
相关产品推荐

