.NET Regex,用于解析国际象棋动作



背景

我想解析相当多的代表国际象棋动作的字符串:

1.e4e62.d3d53.Nd2c54.g3Nf6

每一步都以递增的数字1.、2.、3.开始。等等。在移动之间没有间隔。

完美的匹配是这样的数组:

["1.e4e6", "2.d3d5", "3.Nd2c5", "4.g3Nf6"]

Regex问题

到目前为止,我的正则表达式是:

([0-9].)(.*?)(?=[0-9].)

这适用于在线.NET Regex测试程序(Regex Storm(,除了不包括最后一步(第四步(。如何也包括最后一个?

C#问题

我的代码是:

var regex = new Regex(@"([0-9].)(.*?)(?=[0-9].)");
var match = regex.Match(game);

这里的匹配只包括一个条目"1.e4e6",而不是三个(或四个(。如何修复?

谢谢,pom

它无法匹配最后一项,因为前瞻断言不为真,因为后面没有数字和点。

您可以使用交替添加来匹配字符串的末尾。

要获得所有结果,您可以使用Matches。

([0-9].)(.*?)(?=[0-9].|$)

Regex演示|C#演示

例如

string pattern = @"([0-9].)(.*?)(?=[0-9].|$)";
string input = @"1.e4e62.d3d53.Nd2c54.g3Nf6";
foreach (Match m in Regex.Matches(input, pattern))
{
Console.WriteLine(m.Value);
}

请注意,如果您只想获得匹配,而不想匹配空格,则可以使用S而不是.,并省略捕获组:

[0-9].S*?(?=[0-9].|$)

Regex演示