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

时间:2017-07-28 13:28:12

标签: r logic logical-operators 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

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

2 个答案:

答案 0 :(得分:8)

要搜索包含" a"的字符串。和" b"

grepl("a", x) & grepl("b", x)

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

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

grepl("^55.*Roof", x)

答案 1 :(得分:3)

我正在重新发布@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