我正在使用 nom 版本 6.1.2,我正在尝试解析字符串,例如
A 2 1 2
.
目前,我很乐意至少区分符合要求的输入和不符合要求的输入。(之后我想将输出更改为一个元组,其中“A”作为第一个值,第二个值是 u16 数字的向量。)
字符串总是必须以大写字母 A 开头,之后至少应该有一个空格,然后是一个数字。此外,可以有任意多的额外空格和数字。以数字结尾而不是空格很重要。所有数字都将在 u16 的范围内。我已经写了以下函数:
extern crate nom;
use nom::sequence::{preceded, pair};
use nom::character::streaming::{char, space1};
use nom::combinator::recognize;
use nom::multi::many1;
use nom::character::complete::digit1;
pub fn parse_and(line: &str) -> IResult<&str, &str>{
preceded(
char('A'),
recognize(
many1(
pair(
space1,
digit1
)
)
)
)(line)
}
另外我想提一下,对于使用 CompleteStr 的此类问题有一些答案,但这不再是一个选项,因为它已在一段时间前被删除。
人们解释说我的行为的原因是 nom 不知道字符串的切片何时结束,因此我得到parse_and: Err(Incomplete(Size(1)))
作为输入示例的答案。