使用单子解析器Sprache,寻找匹配数字字符(0..9),不包括非数字字符,但前导或尾随空格是可以的。
我认为这应该工作:
public static readonly Parser<string>
Number = Parse.Numeric.Except(Parse.Letter).AtLeastOnce().Text().Token();
或这个:
public static readonly Parser<int>
Number = Parse.Number.Select(int.Parse).Token();
两者都适用于我能想到的所有情况,除了尾随文本:
[Test]
public void Number_ParseNumberWithTrailingLetter_WasUnsuccessfull()
{
var input = new Input("123bogus");
IResult<string> result = Lexicon.Number(input);
Assert.IsFalse(result.WasSuccessful);
}
有什么线索吗?