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])?")