首页 > 解决方案 > 查找字符串中是否有多个字符

问题描述

我有一个这样的字符串

fileName <- 'tyi_myRef_2019_2020'

我想检查是否存在以下任何字符fileName,如果是,请将其分配给对象。

myChar <- c('myPer','myRef','myYe','myQr')

我这样做的方法是:

if(grepl('myPer', fileName)) {myObject <- 'myPer'}
if(grepl('myRef', fileName)) {myObject <- 'myRef'}
if(grepl('myYe', fileName)) {myObject <- 'myYe'}
if(grepl('myQr', fileName)) {myObject <- 'myQr'}

myObject
"myRef"

有没有更短的方法来做到这一点?

标签: rgrepl

解决方案


你可以sapply像这样使用:

myObject <- myChar[sapply(myChar, function(x) {grepl(x, fileName)})]
myObject
#[1] "myRef"

甚至像@g-grothendieck 建议的那样更短:

myObject <- myChar[sapply(myChar, grepl, fileName)]

如果您有不止一次点击myObject将保留所有点击,您的if语句不是这种情况,这将覆盖。与myObject[length(myObject)]您一样,您将获得最后一击,就像您使用if's 一样。

您还可以|在正则表达式中使用并获得如下匹配:

myObject <- sub(paste0(".*(", paste(myChar, collapse="|"), ").*"), "\\1", fileName)

推荐阅读