R语言如何提取字符串数组中首个数字前的非数字子串
R语言提取字符串首个数字前的非数字子串实现方法
你之前的实现逻辑是固定取空格拆分后的前N个片段,无法适配首个数字前非数字内容长度可变的场景,用正则匹配可以更灵活的实现需求,以下是两种可行方案:
方案1:基础包sub()正则替换(无需安装额外包)
核心逻辑是把首个数字及之后的所有内容(含数字前的末尾空格)直接替换为空,一步得到结果:
# 定义测试向量 a <- c("asd asd 11 ff","qwe 1","asd qweee 33 33 ff") # 执行替换 result <- sub("\\s*\\d.*", "", a)
输出结果:
[1] "asd asd" "qwe" "asd qweee"
正则说明:
\\s*:匹配0个或多个空白字符,用于去掉首个数字前的末尾空格\\d:匹配第一个阿拉伯数字.*:匹配第一个数字之后的所有字符
方案2:stringr包str_extract()正向匹配
如果偏好提取逻辑,可以用tidyverse生态的stringr包实现:
# 未安装包可先执行 install.packages("stringr") library(stringr) # 提取匹配内容 result <- str_extract(a, "^\\D+(?=\\s*\\d)")
正则说明:
^:匹配字符串开头\\D+:匹配1个及以上非数字字符(?=\\s*\\d):正向预查,确认匹配内容的结尾后紧跟空白和首个数字,不会包含数字相关内容
内容的提问来源于stack exchange,提问作者Jose M Rubio
相关产品推荐
相关产品推荐

