R grep 使用向量中的元素的正则表达式

标签 r regex

即使冒着被标记为重复问题的风险,我也会问,因为我检查过的所有相关问题都不能解决我的问题......

我有一个 labs 向量,我想找到与 groups 变量中存储的 3 个组完全匹配的元素。

set.seed(1)
labs <- sample(c(rep('BC-89HX',3), rep('BC-89HX with 2% Puricare + 5% Merquat',3), rep('Own SH',4)), 10)
labs
groups <- c('BC-89HX','BC-89HX with 2% Puricare + 5% Merquat','Own SH')

我想识别“BC-89HX”组元素(不是“BC-89HX with 2% Puricare + 5% Merquat”元素)

grep(groups[1], labs, val=TRUE, fixed=TRUE) #finds more elements than the ones I need
grep(paste(groups[1],"$",sep=""), labs, val=TRUE, fixed=TRUE) #does not work
grep(paste("\\b",groups[1],"\\b",sep=""), labs, val=TRUE, fixed=TRUE) #does not work

有什么帮助吗?

最佳答案

确保“BC-89HX”是字符串中唯一的字符的解决方案,并通过 paste ing ^$我们确定起始位置和结束位置

grep(paste0("^", groups[1], "$"), labs, value=TRUE) 
#[1] "BC-89HX" "BC-89HX" "BC-89HX"

在这种情况下,我们不能使用 fixed = TRUE^$是暗示开始和结束位置的元字符。如果我们这样做fixed = TRUE ,它将把它解析为“labs”没有的文字字符

另一个选择是使用 ==%in%因为我们正在比较固定字符串而不是匹配字符串中的子字符串

labs[labs == groups[1]]
#[1] "BC-89HX" "BC-89HX" "BC-89HX"

labs[labs == groups[2]]
#[1] "BC-89HX with 2% Puricare + 5% Merquat" "BC-89HX with 2% Puricare + 5% Merquat" "BC-89HX with 2% Puricare + 5% Merquat"

更新

如果我们真的想使用 grepfixed = TRUE ,那么一种方法是 pastepattern 中以及具有相同字符的字符串,即

labs[grep(paste0("^", groups[2], "$"), paste0("^", labs, "$"), fixed = TRUE) ]
#[1] "BC-89HX with 2% Puricare + 5% Merquat" "BC-89HX with 2% Puricare + 5% Merquat" "BC-89HX with 2% Puricare + 5% Merquat"
labs[grep(paste0("^", groups[1], "$"), paste0("^", labs, "$"), fixed = TRUE) ]
#[1] "BC-89HX" "BC-89HX" "BC-89HX"

关于R grep 使用向量中的元素的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229558/

相关文章:

jquery - 在 jQuery 验证引擎中添加自定义正则表达式验证

Python Regex 与第一行不匹配

r - 如何在 R 中读取大型 sas7bdat 数据集?

r - R中的百分号

regex - 一个正则表达式,它会捕获引号中的任何内容+引号中的单词草稿?只有带有 Draft 一词的引号

python - 比较运算符的正则表达式

Python 和带有 Unicode 的正则表达式

r - 分箱数据的生存

r - 提取字符串中的前 2 个字符

r - 根据另一个向量中的数据 block 分配一个二进制向量