如何在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
相关产品推荐
相关产品推荐

