R:how to get grep to return the match, rather than the whole string

Solution 1:

Try the stringr package:

library(stringr)
str_match(alice, ".*\\.D([0-9]+)\\.LIS.*")[, 2]

Solution 2:

You can do something like this:

pat <- ".*\\.D([0-9]+)\\.LIS.*"
sub(pat, "\\1", alice)

If you only want the subset of alice where your pattern matches, try this:

pat <- ".*\\.D([0-9]+)\\.LIS.*"
sub(pat, "\\1", alice[grepl(pat, alice)])