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

如何在R数据框列中提取首个数字或左方括号前的子字符串?

在R中提取指定子字符串的方法

要实现从字符串里提取首个数字或左方括号[之前的内容,同时去掉末尾空格,这里给你两种可行方案:

1. 基础R(base R)方法

先构造示例向量:

text_vec <- c(
  "Arturo Beniamo 29 10 2015.docx",
  "Arturo Beniamo [30 12 2015].docx",
  "Dominici Leonardo 02 06 2019.docx",
  "Didonna Marco 07 09 2023.docx"
)

使用sub配合正则表达式匹配替换,再用trimws去除末尾空格:

result_base <- trimws(sub("\\s*(?:\\d|\\[).*", "", text_vec))
result_base

运行结果:

[1] "Arturo Beniamo"    "Arturo Beniamo"    "Dominici Leonardo" "Didonna Marco"

正则说明

\\s*(?:\\d|\\[).*的含义:

  • \\s*:匹配0个或多个空格
  • (?:\\d|\\[):匹配数字(\\d)或左方括号(\\[需转义),非捕获组不保留这部分内容
  • .*:匹配该位置之后的所有字符
    替换为空字符串后,再用trimws清理末尾多余空格。

2. stringr包方法(tidyverse生态)

如果习惯用tidyverse工具,先加载stringr包,用str_extract配合正向预查提取目标内容,再用str_trim去空格:

library(stringr)
result_str <- str_trim(str_extract(text_vec, "^.*?(?=\\s*(?:\\d|\\[))"))
result_str

运行结果和上面一致。

正则说明

^.*?(?=\\s*(?:\\d|\\[))的含义:

  • ^:从字符串开头匹配
  • .*?:非贪婪模式匹配任意字符,直到满足后续条件
  • (?=...):正向预查,确保后面跟着“空格+数字/左括号”,但不把这部分纳入提取结果
    最后用str_trim清理首尾空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:22:42