You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:49:15