The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

And/Or Detection

library(strex)

How it works

strex offers easy and/or versions of stringr::str_detect() via str_detect_all() and str_detect_any(). These are vectorized over string but not pattern. stringr::fixed() and stringr::coll()) are handled correctly. Otherwise, stringr regular expressions are used. For str_detect_all(), a pattern argument c("x", "y") is converted to "(?=.*x)(?=.*y)". For str_detect_any(), a pattern argument c("x", "y") is converted to "x|y".

Examples

str_detect_all("quick brown fox", c("x", "y", "z"))
#> [1] FALSE
str_detect_all(c(".", "-"), ".")
#> [1] TRUE TRUE
str_detect_all(c(".", "-"), coll("."))
#> [1]  TRUE FALSE
str_detect_all(c(".", "-"), coll("."), negate = TRUE)
#> [1] FALSE  TRUE
str_detect_all(c(".", "-"), c(".", ":"))
#> [1] FALSE FALSE
str_detect_all(c(".", "-"), coll(c(".", ":")))
#> [1] FALSE FALSE
str_detect_all("xyzabc", c("a", "c", "z"))
#> [1] TRUE
str_detect_all(c("xyzabc", "abcxyz"), c(".b", "^x"))
#> [1]  TRUE FALSE
str_detect_any("quick brown fox", c("x", "y", "z"))
#> [1] TRUE
str_detect_any(c(".", "-"), ".")
#> [1] TRUE TRUE
str_detect_any(c(".", "-"), coll("."))
#> [1]  TRUE FALSE
str_detect_any(c(".", "-"), coll("."), negate = TRUE)
#> [1] FALSE  TRUE
str_detect_any(c(".", "-"), c(".", ":"))
#> [1] TRUE TRUE
str_detect_any(c(".", "-"), coll(c(".", ":")))
#> [1]  TRUE FALSE
str_detect_any(c("xyzabc", "abcxyz"), c(".b", "^x"))
#> [1] TRUE TRUE

Performance

Unless you’re doing a huge amount of computation, it won’t matter, but FWIW, it’s faster to convert to regex using str_escape() rather than using coll().

bench::mark(
  str_detect_all(rep("*", 1000), rep(str_escape("*"), 555)),
  str_detect_all(rep("*", 1000), coll(rep("*", 555))),
  min_iterations = 100
)
#> # A tibble: 2 × 6
#>   expression                             min median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
#> 1 "str_detect_all(rep(\"*\", 1000), r… 171ms  184ms      5.49  162.22KB    0    
#> 2 "str_detect_all(rep(\"*\", 1000), c… 159ms  161ms      6.19    4.31MB    0.688

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.