r- grepl 以任何顺序查找匹配的字符串

r- grepl to find matching strings in any order

我有一个匹配的字符串。需要查找匹配多个字符串 (both/all) 和任意顺序的文本:

Text1 : "I have no intention to make illegal parking along the road or cause obstruction."

Text2 : "I have no intention to make illegal parking along the road or cause damage."

我的代码:

    mynames=c("illegal parking" , "obstruction")
grepl(paste(mynames, collapse='|'), Text1, ignore.case=TRUE)

当我通过 Text1Text2 - 我得到 TRUE - 对于两者; 但是我需要 TRUE 用于 Text1FALSE 用于 Text2 。它应该在只有两个字符串都存在时产生 - 并且它可以在文本中以任何顺序排列。

|在正则表达式中表示 "or"。这就是为什么它在两个文本上都是正确的。 您必须测试 "illegal parking" 是否跟随 "obstruction"(中间有或没有东西),在正则表达式中这是 "illegal parking.*obstruction",或者如果您有相反的方式,所以 "illegal parking.*obstruction|obstruction.*illegal parking"

grepl("illegal parking.*obstruction|obstruction.*illegal parking", Text1, ignore.case=TRUE)

您可以测试 str_extract_all() 的结果,看看两者是否匹配。这种方法意味着您不必担心顺序。

library(stringr)
library(purrr)

map_lgl(str_extract_all(c(Text1, Text2), paste(mynames, collapse='|')), ~all(mynames %in% .x))

[1] TRUE FALSE