背景
我想解析相当多的代表国际象棋动作的字符串:
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演示