You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在国际象棋PGN数据库中为每步白方着法添加"$18"?

解决方案

要实现给PGN国际象棋数据库中每步白方着法后添加$18的需求,你可以用这条Perl命令,和你之前处理胜负标记的思路一脉相承:

perl -00 -ne 's/(\d+\.\s+\S+)/$1 \$18/g; print;' games.pgn>white_moves_with_tag.pgn

命令细节拆解:

  • -00:开启段落模式,把PGN里的整个对局作为一个独立处理单元,避免因为对局换行导致的匹配遗漏——毕竟PGN经常会把长对局拆分成多行显示。
  • -ne:n让Perl循环处理输入的每个段落,e允许直接在命令行写处理脚本,不用单独创建Perl文件。
  • 正则表达式(\d+\.\s+\S+):精准捕获白方着法的核心结构:
    • \d+:匹配着法的数字序号(比如1、2)
    • \.:匹配序号后的小数点(必须转义,因为.在正则里是通配符)
    • \s+:匹配序号和着法之间的空白(空格、制表符都能覆盖)
    • \S+:匹配白方的着法内容(比如e4、Nf3这类非空白的棋步字符)
  • 替换规则$1 \$18:$1代表刚才捕获的完整白方着法,后面加上空格和$18——这里的\$是转义处理,防止Perl把$18误判为变量引用。
  • 最后的games.pgn>white_moves_with_tag.pgn:指定输入的PGN源文件,把处理后的结果输出到新文件中,避免直接覆盖原数据。

兼容复杂场景的拓展版本:

如果你的PGN里有更复杂的着法(比如带吃子符号x、将军+、将死#,或者带简单注释的情况),可以把正则里的\S+换成[\w#x+]+,这样能兼容更多棋步格式,命令调整为:

perl -00 -ne 's/(\d+\.\s+[\w#x+]+)/$1 \$18/g; print;' games.pgn>white_moves_with_tag.pgn

内容的提问来源于stack exchange,提问作者darmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:32:08