0

Given a vector of URLs I want to filter these URLs and pulling out only URLs matching a set of patterns.

/pages/
/econo/*
/categ/sub 

I am currently using the data.table package. For matching a vector with a single pattern I use:

urls[! urls %like% "/pages"]

However, when using multiple patterns this does not work:

urls[! urls %like% c("/pages/", "/categ/sub")]
slamballais
  • 3,161
  • 3
  • 18
  • 29
SalimK
  • 360
  • 1
  • 3
  • 18
  • Please supply [a reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – Thomas Jan 18 '16 at 22:16

1 Answers1

1

Use | to separate the patterns:

urls[!urls %like% paste(c("/pages/", "/categ/sub"), collapse = "|")]

Example:

DT <- data.table(a = paste0(letters, rev(letters)))
DT[a %like% paste(c("a", "b", "c"), collapse = "|")]

Edit: This also works without the data.table package:

vector <- paste0(letters, rev(letters))
patterns <- c("a", "b", "c")
matches <- unique(grep(paste(patterns, collapse = "|"), 
                       vector, value = TRUE))
slamballais
  • 3,161
  • 3
  • 18
  • 29