如何在 nom 中使用带有可选终止分隔符的分隔符?

Max*_*ian 4 rust nom

我想用 nom 来解析这两个:

[
   a, 
   b,  
   c
]
Run Code Online (Sandbox Code Playgroud)
[
   a, 
   b,  
   c,
]
Run Code Online (Sandbox Code Playgroud)

目前我有这段代码可以解析第一个,但不能解析第二个(第一个函数是 nom 文档中的一个配方,它只解析空格):

[
   a, 
   b,  
   c
]
Run Code Online (Sandbox Code Playgroud)

我是 nom 的新手,对当前的代码没有任何忠诚,所以很好地告诉我我做错了......

谢谢!

hel*_*low 7

这是一个(可能有多种解决方案)。

只需terminated与以下一起使用opt

pub fn parse_list(input: &str) -> IResult<&str, Vec<&str>> {
    delimited(
        ws(tag("[")),
        terminated(
            separated_list0(
                ws(tag(",")),
                take_while1(|x| char::is_alphabetic(x) || x == '_'),
            ),
            opt(ws(tag(","))),
        ),
        ws(tag("]")),
    )(input)
}
Run Code Online (Sandbox Code Playgroud)