【问题标题】:How can I check if multiple strings exist in another string?如何检查另一个字符串中是否存在多个字符串?
【发布时间】:2015-05-12 01:30:34
【问题描述】:

我有这个字符串:

myStr <- "I am very beautiful btw"
str <- c("very","beauti","bt")

现在我想检查myStr 是否包含str 中的所有字符串,我该如何在R 中做到这一点?例如上面它应该是TRUE。 非常感谢

【问题讨论】:

    标签: r


    【解决方案1】:

    是的,您可以使用grepl(实际上不是grep),但您必须为每个子字符串运行一次:

    > sapply(str, grepl, myStr)
      very beauti     bt 
      TRUE   TRUE   TRUE 
    

    如果所有结果都为真,则只得到一个结果,请使用all

    > all(sapply(str, grepl, myStr))
    [1] TRUE
    

    编辑:

    如果您要检查多个字符串,请说:

    myStrings <- c("I am very beautiful btw", "I am not beautiful btw")
    

    然后运行sapply 代码,它将返回一个矩阵,其中myStrings 中的每个字符串对应一行。在每一行应用all

    > apply(sapply(str, grepl, myStrings), 1, all)
    [1]  TRUE FALSE
    

    【讨论】:

    • 感谢您的回复@Molx 如果 myStr 包含多个字符串,我想看看其中哪些包含 str 中的所有字符串?
    • 不用通过apply去矩阵,你也可以这样做:do.call(mapply, c(all,lapply(str, grepl, myStrings) ))
    【解决方案2】:

    使用stringr 你可以这样做:

    str_detect(myStr, str)
    

    为每个子字符串返回一个结果:

    #[1] TRUE TRUE TRUE
    

    或者根据@thelatemail 的建议,如果你想知道它们是否都是真的:

    all(str_detect(myStr,str))
    

    这给出了:

    #[1] TRUE
    

    您还可以在myStr 中找到与str 匹配的每个字符的位置(开始、结束)

    str_locate(myStr, str)
    

    这给出了:

    #     start end
    #[1,]     6   9
    #[2,]    11  16
    #[3,]    21  22
    

    【讨论】:

    • 如果您要使用stringr,请使用适当的函数 - all(str_detect(myStr,str))
    • 如果我们只需要一个 TRUE 值,也可以使用“any”而不是“all” - any(str_detect(myStr,str))
    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2010-10-13
    • 2022-03-31
    相关资源
    最近更新 更多