我有这个字符串:
myStr <- "I am very beautiful btw"
str <- c("very","beauti","bt")
Run Code Online (Sandbox Code Playgroud)
现在我想检查是否myStr包含所有字符串str,如何在R中执行此操作?例如上面应该是TRUE.非常感谢
是的,您可以使用grepl(不是grep,实际上),但必须为每个子字符串运行一次:
> sapply(str, grepl, myStr)
very beauti bt
TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
要获得只有一个结果,如果所有结果都为真,请使用all:
> all(sapply(str, grepl, myStr))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您要检查多个字符串,请说:
myStrings <- c("I am very beautiful btw", "I am not beautiful btw")
Run Code Online (Sandbox Code Playgroud)
然后运行sapply代码,该代码将为myStrings中的每个字符串返回一行矩阵.适用all于每一行:
> apply(sapply(str, grepl, myStrings), 1, all)
[1] TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
使用stringr你可以做:
str_detect(myStr, str)
Run Code Online (Sandbox Code Playgroud)
返回每个子字符串的结果:
#[1] TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
或者根据@thelatemail建议,如果你想知道它们是否都是真的:
all(str_detect(myStr,str))
Run Code Online (Sandbox Code Playgroud)
这使:
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)
您还可以找到该myStr匹配中每个角色的位置(开始,结束)str
str_locate(myStr, str)
Run Code Online (Sandbox Code Playgroud)
这使:
# start end
#[1,] 6 9
#[2,] 11 16
#[3,] 21 22
Run Code Online (Sandbox Code Playgroud)