C# Sprache--无法识别此序列

C# Sprache--无法识别此序列,c#,parsing,sprache,C#,Parsing,Sprache,我想匹配字符串,其中第一个字符是字母,然后后面是数字或字母的多个字符,最后以字母结尾。例如,a11a11a正确,但a11aa11不正确,因为它以数字而不是字母结尾 为此,我编写了以下代码: var grammar = from first in Parse.Letter.Once() from rest in Parse.LetterOrDigit.Many() from end in Parse.Letter.Once() select new string(f

我想匹配字符串,其中第一个字符是字母,然后后面是数字或字母的多个字符,最后以字母结尾。例如,
a11a11a
正确,但
a11aa11
不正确,因为它以数字而不是字母结尾

为此,我编写了以下代码:

var grammar =
    from first in Parse.Letter.Once()
    from rest in Parse.LetterOrDigit.Many()
    from end in Parse.Letter.Once()
    select new string(first.Concat(rest).Concat(end).ToArray());

var result = grammar.TryParse("a111a");
不幸的是,
letterDigit.Many()
也会消耗最后一个字母

有什么办法可以避免这种情况吗?

这里有一个解决方案:

Parser<IEnumerable<char>> A = null, B = null, C = null;

var letter = Parse.Letter.Once();
var digit = Parse.Digit.Once();

B =
    (
    from d in digit
    from cs in Parse.Ref(() => C)
    select d.Concat(cs)
    ).Or
    (
        from l in letter
        from bs in Parse.Ref(() => B)
        select l.Concat(bs)
    ).Or(letter);

C = (
    from d in digit
    from bs in Parse.Ref(() => B)
    select d.Concat(bs)
    ).Or(letter);

A = (
    from l in letter
    from bs in Parse.Ref(() => B)
    select l.Concat(bs)
    ).Or(letter);

var grammar =
    from _ in Parse.WhiteSpace.Many()
    from a in A
    from __ in Parse.WhiteSpace.Many()
    select a;

你想用一个我想他想用的是Sprache,不是RegEx。仅仅因为正则表达式对于给定的情况很简单,并不意味着它对于其他语法规则也很简单。。
Parse.Regex("[a-z]([a-z0-9]*[a-z])?")