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

层级多分隔符字符串分割函数结果不符预期,求问题排查

层级式多分隔符字符串解析函数问题排查

我想要实现一个基于多分隔符的层级式字符串解析函数:依次尝试第一个、第二个、第三个分隔符进行分割。参考相关实现后,运行结果与预期不符,以下是代码、实际输出和预期输出,请问忽略了什么问题?

# 按层级分隔符拆分队伍名称
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00