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

FParsec解析空格分隔列表时末尾报错预期存在更多元素问题求助

问题原因

spaces解析器支持匹配零个空白字符,属于零长度匹配解析器。sepBy的执行逻辑会在成功匹配一个元素后,尝试先匹配分隔符,再匹配下一个元素。当解析完最后一个元素时,输入已到末尾,此时spaces仍然可以成功匹配零长度空白,导致sepBy会继续期望匹配下一个以[开头的元素,最终触发输入结束的报错。

解决方案

推荐直接用many组合子替代sepBy实现需求,天然支持参数间零空格、单空格、多空白/换行分隔的场景,代码如下:

let parseArgumentList : Parser<string list, unit> =
    let parseArgument = skipChar '[' >>. manySatisfy (fun x -> x <> ']') .>> skipChar ']'
    // 每个元素前允许任意数量空白(支持零个),最后匹配eof确保全量输入解析完成
    many (spaces >>. parseArgument) .>> eof

效果验证

上述代码对以下输入都可以正常解析:

  • 无空格输入"[testString][testString]",输出Success: ["testString"; "testString"]
  • 带空格输入"[testString] [testString]",输出Success: ["testString"; "testString"]
  • 多空白/换行输入"[test1] \n [test2]",输出Success: ["test1"; "test2"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:54:02