r - 查找字符串中是否有多个字符
问题描述
我有一个这样的字符串
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"
有没有更短的方法来做到这一点?
解决方案
你可以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)
推荐阅读
- encryption - 从媒体特别是音频生成 xml 清单
- ruby - 将字符串转换为 Float::INFINITY
- sap-cloud-sdk - 如何记录 ODataQueryBuilder API / VDM API 发送的 HTTP 请求?
- c++ - LNK1104 无法打开文件 'k4a::k4a.lib'
- php - 如何使用带有 Azure 存储帐户的 Azure 文件中的 PHP 显示文本内容本身?
- flutter - Object.methodName() 和 Object..methodName() 飞镖之间的区别
- android - Android:使用 Glide 加载图像会在两端留下空白
- angularjs - 调用两次 AngularJS IPromise.then(...) 可以吗?
- python-3.x - 如果管理员用户存在,如何隐藏管理员注册按钮
- swift - 如何在没有第三方库的情况下快速创建六个项目标签栏?