2014-02-26 11 views
2

我有一个国际象棋游戏的PGN(便携式游戏符号)。我想要的只是获得一系列举措。例如:从PGN获取移动列表

PGN:

1. e4 e5 2. f4 exf4 3. Nf3 d5 4. exd5 Nf6 5. Nc3 Nxd5 6. Nxd5 Qxd5 7. d4 Bg4 8. 
Bxf4 Nc6 9. Be2 O-O-O 10. c3 Qe4 11. Qd2 Rxd4 12. Nxd4 Nxd4 13. cxd4 Bb4 14. 
Kf2 Bxd2 15. Bxg4+ f5 16. Bxd2 fxg4 17. Rhe1 Qxd4+ 18. Be3 Qxb2+ 19. Kf1 Re8 
0-1 

输出:

['e4','e5','f4','exf4','Nf3','d5', .... , 'Re8'] 

我的想法是把串,并在空格分开,然后安排一个新的阵列方式,但我不知道是否有更好的方法来做到这一点。没有特定的语言我只是一般感兴趣。可能是python,javascript,并不重要。

另外,PGN有时会在字符串中加上符号或“括号”中的“变体”,我想忽略它们。有任何想法吗? 谢谢

+3

你需要一个PGN解析器。有许多可以用作学习资源的存在。甚至有可能是一个规范。请使用这些资源来学习。 –

回答

1

奇怪的是,我找不到好的PGN解析器的Ruby或Javascript。下面是我简单测试了其他两个库:

也许这是真的是自己编写解析器的最好方法。您可以使用正则表达式消除注释,因为它们不是嵌套的。

(来自Wikipedia) 注释由“;”或“ (一直持续到该行末尾的评论)或“{”(持续到匹配的“}”)。评论不嵌套。

评论(包括变体)消失后,您可以按照您的意图解析这些移动(分割空白并过滤移动数字)。