从PGN获取移动列表

时间:2014-02-26 19:44:11

标签: language-agnostic chess

我有一个国际象棋游戏的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会在字符串中间加上符号或者#34;变体"用括号表示,我想忽略这些。有任何想法吗? 感谢

2 个答案:

答案 0 :(得分:1)

奇怪,我找不到适合Ruby或Javascript的优秀PGN解析器。以下是我简要测试过的另外两个库:

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

  

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

在评论(包括变体)消失后,您可以按预期解析移动(拆分空格并过滤移动数字)。

答案 1 :(得分:0)

我刚开始在https://rubygems.org/gems/pgn使用Ruby PGN gem它有一个解析器模块,你可以做PGN-> FEN,玩游戏,使用FEN导入设置位置等等。我在https://github.com/tobiasvl/pgn/tree/pgn-annotations处使用了这个分支,这个分支能够解析包含变体和注释的PGN。

这是一个javascript版本https://github.com/jhlywa/chess.js