在R语言中提取特定模式单词:空格+t/r后接数字并返回NA
在R语言中提取符合特定模式的单词
可以使用stringr包的str_extract函数结合正则表达式实现需求,以下是具体方案:
实现代码
# 安装并加载stringr包(首次运行需安装) if (!require(stringr)) { install.packages("stringr") library(stringr) } testvec <- c("random stuff here","words 10293","random t101rando 101 000","r10000","stuff i-10283","word1 t-12.34 stuff rand10293","random100 u-1000"," r10.0 x ","test x-2930"," T r.1234567","testword120num") # 定义匹配模式的正则表达式 pattern <- "(?<=\\s)([tr](-?\\d*\\.?\\d+)[^\\s]*)" # 提取符合条件的单词,无匹配则返回NA result <- str_extract(testvec, pattern) # 输出结果 result
正则表达式说明
(?<=\\s):正向预查,确保目标单词前有一个空格(排除字符串开头无空格的情况,比如示例中的r10000)[tr]:匹配小写的t或r(若需支持大小写,可改为[tTrR])(-?\\d*\\.?\\d+):匹配数字部分,支持:- 可选负号(
-?) - 整数、小数(包括
.123、123.、123.456、-123等格式)
- 可选负号(
[^\\s]*:捕获单词剩余的非空白字符(比如示例中的t101rando)
运行结果
执行代码后得到的结果与期望一致:
[1] NA NA "t101rando" NA NA "t-12.34" NA "r10.0" NA "r.1234567" NA
内容的提问来源于stack exchange,提问作者Neal Barsch
相关产品推荐
相关产品推荐

