是否可以在 grepl() 中使用 AND 运算符?

Is it possible to use an AND operator in grepl()?

我想搜索以 55 开头的所有内容以及其中包含单词 Roof(区分大小写,对于那些好奇的人)的任何内容。

到目前为止我一直没有成功,因为我似乎只能使用 OR 运算符:

grepl("*^55|*Roof", dataset$longname)

最终,我想达到这样的效果:

grepl("*^55&&*Roof", dataset$longname)

grepl("*^55&*Roof", dataset$longname)

(显然,这些都不起作用 - 它们仅用于说明。)

我希望我的结果显示以 55 开头且其中任何位置包含单词 Roof 的任何内容。

例如,我希望 grepl() 函数可以获取这两个结果:

55 - Roof Structure

55-Wall to Roof

是否有可以与 grepl() 一起使用的 AND 运算符?

搜索同时具有 "a" 和 "b"

的字符串
grepl("a", x) & grepl("b", x)

grepl("a.*b|b.*a", x)

如果我们知道两部分的顺序,那么我们可以省略最后的两部分之一 grepl。例如,对于问题中的查询,这足以找到以 55 开头并包含 Roof

的字符串
grepl("^55.*Roof", x)

我正在重新发布@Psidom 的回答,因为他的回答已被删除但可扩展到 n AND 子句。如果@Psidom 取消删除他的回复,我会删除这个(我投票取消删除)但觉得答案对其他搜索者很重要:

s <- c("55 - Roof Structure", "55-Wall to Roof", 'd 55 Roof')
grepl("(?=.*^55)^Roof", s, perl = TRUE)
## [1]  TRUE  TRUE FALSE

## 2 AND clauses
grepl("^(?=.*^55)(?=.*Roof)(?=.*Wall)", s, perl = TRUE)
## [1]  FALSE  TRUE FALSE