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

如何在R语言中从PGN国际象棋记谱字符串提取特定时钟数值?

从PGN国际象棋记谱字符串提取时钟时间数值(R语言实现)

对于你的需求,用正则表达式匹配比strsplit()更高效,因为目标数值嵌在固定格式的{[%clk ...]}标记里。下面给你两种实现方式:

方法一:使用stringr包(新手友好)

stringr是R中处理字符串的常用包,语法直观易读:

  1. 先安装并加载包(如果还没安装的话):
install.packages("stringr")
library(stringr)
  1. 定义原始PGN字符串并提取数值:
# 原始PGN字符串
pgn_str <- "1. e4 {[%clk 0:00:59.5]} 1... b6 {[%clk 0:00:57.4]} 2. Nc3 {[%clk 0:00:59.4]} 2... Bb7 {[%clk 0:00:57.2]}"

# 提取时钟时间的小数部分
clk_times <- str_extract_all(pgn_str, "(?<=\\[%clk\\s\\d{2}:\\d{2}:)\\d+\\.\\d")[[1]]

# 可选:转换为数值类型(方便后续计算)
clk_times_num <- as.numeric(clk_times)

运行后,clk_times会得到字符向量["59.5", "57.4", "59.4", "57.2"],clk_times_num则是对应的数值向量。

方法二:基础R实现(无需额外包)

如果不想安装新包,可以用基础R的正则匹配函数:

# 原始PGN字符串
pgn_str <- "1. e4 {[%clk 0:00:59.5]} 1... b6 {[%clk 0:00:57.4]} 2. Nc3 {[%clk 0:00:59.4]} 2... Bb7 {[%clk 0:00:57.2]}"

# 启用Perl正则模式匹配目标数值
matches <- regmatches(pgn_str, gregexpr("(?<=\\[%clk\\s\\d{2}:\\d{2}:)\\d+\\.\\d", pgn_str, perl = TRUE))[[1]]

# 可选:转换为数值类型
matches_num <- as.numeric(matches)

正则表达式说明

(?<=\\[%clk\\s\\d{2}:\\d{2}:)是正向预查,用来定位[%clk 00:00:这个固定前缀;\\d+\\.\\d则匹配你需要的“数字+小数点+一位数字”格式(比如59.5)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:03:24