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

R语言如何修剪数据框内字符串首尾内容并保留中间部分

解答

完全可以用单条字符串处理命令实现需求,不需要拆分两次替换,最贴合你“保留中间内容、移除前后固定字符”思路的方案是用正则捕获组,鲁棒性比多次替换更好。

  • 针对white_player列的单字段写法
    匹配整段字符串的固定结构:开头为[White 、结尾为],把中间需要保留的用户名用圆括号标记为捕获组,替换时仅保留捕获组内容即可:
library(stringr)
# 单个值测试
str_replace(game_summary_df[1,1], "^\\[White (.*)\\]$", "\\1")
# 输出结果为 "Gyc12"

# 整列清洗直接传入列向量即可
game_summary_df$white_player <- str_replace(
  game_summary_df$white_player, 
  "^\\[White (.*)\\]$", 
  "\\1"
)

正则规则说明:

  • ^锚定字符串开头、$锚定字符串结尾,避免误匹配内容中的无关字符

  • \\[White 匹配开头需要删除的固定前缀

  • (.*)捕获中间任意长度的内容(即需要保留的用户名),标记为第1个捕获组

  • \\]匹配结尾需要删除的右方括号

  • 替换参数\\1代表引用第1个捕获组匹配到的内容,实现“只留中间值”的效果

  • 全表通用批量清洗写法
    你的数据集所有列都遵循[字段标签 字段值]的统一格式,可以写一套通用规则一次性清洗所有列,不需要给每列单独写前缀匹配规则:

game_summary_df <- as.data.frame(
  lapply(game_summary_df, function(col) {
    str_replace(col, "^\\[\\w+\\s(.*)\\]$", "\\1")
  })
)

清洗后直接得到纯值的规整数据:

white_playerblack_playerresultwhite_eloblack_elo
Gyc12SuperCarp1/2-1/213551243

补充:如果只是简单删除固定片段,也可以用str_remove_all搭配正则或运算符|,一次性匹配所有要删除的内容:

str_remove_all(game_summary_df[1,1], "\\[White |\\]")

但这种写法不会锚定字符位置,如果字段值本身包含]字符会出现误删,处理结构化格式的数据更推荐用捕获组方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:01:09