And/Or Detection

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
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"))
str_detect_all(c(".", "-"), ".")
str_detect_all(c(".", "-"), coll("."))
str_detect_all(c(".", "-"), coll("."), negate = TRUE)
str_detect_all(c(".", "-"), c(".", ":"))
str_detect_all(c(".", "-"), coll(c(".", ":")))
str_detect_all("xyzabc", c("a", "c", "z"))
str_detect_all(c("xyzabc", "abcxyz"), c(".b", "^x"))
str_detect_any("quick brown fox", c("x", "y", "z"))
str_detect_any(c(".", "-"), ".")
str_detect_any(c(".", "-"), coll("."))
str_detect_any(c(".", "-"), coll("."), negate = TRUE)
str_detect_any(c(".", "-"), c(".", ":"))
str_detect_any(c(".", "-"), coll(c(".", ":")))
str_detect_any(c("xyzabc", "abcxyz"), c(".b", "^x"))

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
)


Try the strex package in your browser

Any scripts or data that you put into this service are public.

strex documentation built on Nov. 2, 2023, 6:04 p.m.