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

Python分割字符串保留分隔符不单独成项的自定义函数bug如何修复

Python分割字符串保留分隔符函数修复方案

原代码问题原因

  • 硬编码了split('e')的处理逻辑,完全不具备通用性,仅在分割字符为e时可能生效,你当前使用x作为分割字符,这段逻辑完全无效
  • 没有正确处理split(char)后的边界空值:你测试用的字符串ashkjadhssdx以x结尾,split('x')得到的初始结果为['ashkjadhssd', ''],原代码给所有元素拼接分隔符后,空字符串就变成了单独的x,导致出现多余的单独分隔符列表项

修复后代码

def separate(char, text, splitat='after'):
    # 按指定字符分割字符串,保留分隔符且分隔符不单独成为列表项
    # splitat参数:
    #   after:分隔符跟随在前面的分段末尾
    #   before:分隔符放置在后面的分段开头
    #   其他值返回原生split()方法的结果
    raw_split = text.split(char)
    # 无分割结果直接返回空列表
    if len(raw_split) <= 1:
        return [text] if text else []
    
    res = []
    if splitat == 'after':
        # 除了最后一个分段,前面的所有分段都拼接分隔符
        res = [part + char for part in raw_split[:-1]]
        # 最后一个分段非空就追加,空则说明原字符串以分隔符结尾,无需额外处理
        if raw_split[-1]:
            res.append(raw_split[-1])
    elif splitat == 'before':
        # 第一个分段非空就保留,空则说明原字符串以分隔符开头,无需额外处理
        if raw_split[0]:
            res.append(raw_split[0])
        # 除了第一个分段,后面的所有分段都在开头拼接分隔符
        res += [char + part for part in raw_split[1:]]
    else:
        return raw_split
    
    return res

测试效果

你提供的测试用例运行结果:

  • separate('x', 'ashkjadhssdx', 'before') 返回 ['ashkjadhssdx']
  • separate('x', 'ashkjadhssdx', 'after') 返回 ['ashkjadhssdx']

多分隔符测试用例separate('x', 'axbxcxd', 'after')返回 ['ax', 'bx', 'cx', 'd']
多分隔符测试用例separate('x', 'axbxcxd', 'before')返回 ['a', 'xb', 'xc', 'xd']

内容的提问来源于stack exchange,提问作者ashbit_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:06