如何检查另一个字符串中是否存在多个字符串?

Moh*_*mad 3 r

我有这个字符串:

myStr <- "I am very beautiful btw"
str <- c("very","beauti","bt")
Run Code Online (Sandbox Code Playgroud)

现在我想检查是否myStr包含所有字符串str,如何在R中执行此操作?例如上面应该是TRUE.非常感谢

Mol*_*olx 7

是的,您可以使用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)


Ste*_*pré 5

使用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)