Parsing 使用nom解析可变空格分隔的列表

Parsing 使用nom解析可变空格分隔的列表,parsing,rust,nom,Parsing,Rust,Nom,我如何使用可能被空格分隔或不被空格分隔的令牌列表 我正试图用nom(6.1.2)的格式解析中文罗马拼音(拼音)。例如,“ni3hao3ma5”,由于转录中的人为错误,有时被写成“ni3hao3ma5”或“ni3hao3ma5”(注意可变间距) 我已经编写了一个解析器来处理单个音节,例如[“ni3”、“hao3”、“ma5”],我正试图使用nom::multi::separated_list0来解析它: nom::multi::separated_list0( nom::character

我如何使用可能被空格分隔或不被空格分隔的令牌列表

我正试图用
nom
(6.1.2)的格式解析中文罗马拼音(拼音)。例如,
“ni3hao3ma5”
,由于转录中的人为错误,有时被写成
“ni3hao3ma5”
“ni3hao3ma5”
(注意可变间距)

我已经编写了一个解析器来处理单个音节,例如
[“ni3”、“hao3”、“ma5”]
,我正试图使用
nom::multi::separated_list0
来解析它:

nom::multi::separated_list0(
    nom::character::complete::space0,
    syllable,
)(i)?;
但是,在所有令牌都被消耗之后,我得到了一个
错误(错误{input:,code:SeparatedList})

使用

nom::multi::separated_list0(
    nom::character::complete::space0,
    syllable,
)(i)?;
space0
分隔符与空字符串匹配,因此它将到达输入字符串的末尾,
separated_list0
将继续尝试使用空字符串,因此出现
Err(Error(Error{input:,code:SeparatedList}))

我的解决方案是使用
nom::multi::many1
并在内部解析器中处理可选空格,而不是像这样使用
nom::multi::separated_list0

fn音节(i:&str)->IResult{
//许多