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_
相关产品推荐
相关产品推荐

