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

Mus*_*Guy 8 logic r logical-operators grepl

我想在其中搜索任何以及开头的55任何内容Roof(区分大小写,对于那些好奇的人).

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

grepl("*^55|*Roof", dataset$longname)
Run Code Online (Sandbox Code Playgroud)

最终,我希望实现这样的目标:

grepl("*^55&&*Roof", dataset$longname)
Run Code Online (Sandbox Code Playgroud)

要么

grepl("*^55&*Roof", dataset$longname)
Run Code Online (Sandbox Code Playgroud)

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

我希望我的结果能够显示任何55以及在其中包含Roof任何单词的内容.

例如,我希望这些结果可以被grepl()函数选取:

55 - Roof Structure
Run Code Online (Sandbox Code Playgroud)

55-Wall to Roof
Run Code Online (Sandbox Code Playgroud)

是否有AND可以使用的运算符grepl()

G. *_*eck 14

搜索同时包含"a"和"b"的字符串

grepl("a", x) & grepl("b", x)
Run Code Online (Sandbox Code Playgroud)

要么

grepl("a.*b|b.*a", x)
Run Code Online (Sandbox Code Playgroud)

如果我们知道这两个部分的顺序,那么我们可以省略最后两个部分中的一个grepl.例如,在问题中的查询的情况下,这足以找到以55开头并包含Roof的字符串

grepl("^55.*Roof", x)
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ker 6

我重新发布了 @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
Run Code Online (Sandbox Code Playgroud)