我想搜索以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()
运算符?
答案 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