首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sprache:如何从数字匹配中排除字母?

Sprache:如何从数字匹配中排除字母?
EN

Stack Overflow用户
提问于 2013-03-26 11:29:25
回答 1查看 726关注 0票数 1

使用一元解析器Sprache,希望匹配数字字符(0..9),但不包括非数字字符,但可以使用前导空格或尾随空格。

我想这应该行得通:

代码语言:javascript
复制
public static readonly Parser<string>
    Number = Parse.Numeric.Except(Parse.Letter).AtLeastOnce().Text().Token();

或者这样:

代码语言:javascript
复制
public static readonly Parser<int>
    Number = Parse.Number.Select(int.Parse).Token();

这两种方法都适用于我能想到的所有情况,除了尾随文本:

代码语言:javascript
复制
[Test]
public void Number_ParseNumberWithTrailingLetter_WasUnsuccessfull()
{
    var input = new Input("123bogus");
    IResult<string> result = Lexicon.Number(input);
    Assert.IsFalse(result.WasSuccessful);
}

有什么线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-08 11:55:00

如果目标是只接受一个数字,则使用.End()子句消除尾随文本,该子句断言已到达字符串的末尾:

代码语言:javascript
复制
public static readonly Parser<int> MatchInt =
      Parse.Number.Select(int.Parse).Token().End();

相反,如果您希望接受输入流中的后续数字(由空格分隔),则可以使用.Then()子句为您提供所有这些数字。类似于:

代码语言:javascript
复制
public static readonly Parser<int> MatchInt = Parse.Number.Select(int.Parse).Token();
public static readonly Parser<IEnumerable<int>> MatchIntList = 
      from int1 in MatchInt
      from intRest in Parse.WhiteSpace.AtLeastOnce().Then(_ => MatchInt).Many().End()
      select new List<int>() { int1 }.Concat(intRest);

没有经过测试-但有希望走上正确的方向。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15628874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档