是否可以在 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
我想搜索以 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