层级多分隔符字符串分割函数结果不符预期,求问题排查
层级式多分隔符字符串解析函数问题排查
我想要实现一个基于多分隔符的层级式字符串解析函数:依次尝试第一个、第二个、第三个分隔符进行分割。参考相关实现后,运行结果与预期不符,以下是代码、实际输出和预期输出,请问忽略了什么问题?
# 按层级分隔符拆分队伍名称 def split_new(inp, delims=['VS', '/ ' ,'/']): for d in delims: result = inp.split(d, maxsplit=1) if len(result) == 2: return result else: return [inp] # 若所有分隔符都无效,返回原输入 test_strs = ['STACK/ OVERFLOW', 'STACK #11/00 VS OVERFLOW', 'STACK/OVERFLOW' ] for ts in test_strs: res = split_new(ts) print(res)
实际输出
['STACK/ OVERFLOW'] ['STACK #11/00 ', ' OVERFLOW'] ['STACK/OVERFLOW']
预期输出
['STACK',' OVERFLOW'] ['STACK #11/00 ', ' OVERFLOW'] ['STACK', 'OVERFLOW']
问题原因
你的代码逻辑存在致命错误:在循环遍历分隔符的第一次迭代中,如果当前分隔符无法拆分字符串(结果长度为1),就直接返回原字符串的列表了,完全没机会尝试后续的分隔符。
比如第一个测试字符串STACK/ OVERFLOW,第一个分隔符是VS,拆分后结果长度为1,代码直接执行return [inp],根本没去尝试第二个分隔符/ ;第三个测试字符串同理,没机会走到第三个分隔符/的判断。
修正后的代码
把return [inp]移到循环外部,只有当所有分隔符都尝试过且都无法拆分时,才返回原字符串:
# 按层级分隔符拆分队伍名称 def split_new(inp, delims=['VS', '/ ' ,'/']): for d in delims: result = inp.split(d, maxsplit=1) if len(result) == 2: return result # 所有分隔符都无效时才返回原输入 return [inp] test_strs = ['STACK/ OVERFLOW', 'STACK #11/00 VS OVERFLOW', 'STACK/OVERFLOW' ] for ts in test_strs: res = split_new(ts) print(res)
修正后输出
['STACK', ' OVERFLOW'] ['STACK #11/00 ', ' OVERFLOW'] ['STACK', 'OVERFLOW']
内容的提问来源于stack exchange,提问作者artemis
相关产品推荐
相关产品推荐

