R: fastest way to extract all substrings contained between two substrings
r, regex, string, substring
Solution
For something simple like this, base R handles this just fine.
You can switch on PCRE by using `perl=T` and use lookaround assertions.
x <- 'strt111stpblablastrt222stp'
regmatches(x, gregexpr('(?<=strt).*?(?=stp)', x, perl=T))[[1]]
# [1] "111" "222"
Explanation:
(?<= # look behind to see if there is:
strt # 'strt'
) # end of look-behind
.*? # any character except \n (0 or more times)
(?= # look ahead to see if there is:
stp # 'stp'
) # end of look-ahead
EDIT: Updated below answers according to the new syntax.
You may also consider using the stringi package.
library(stringi)
x <- 'strt111stpblablastrt222stp'
stri_extract_all_regex(x, '(?<=strt).*?(?=stp)')[[1]]
# [1] "111" "222"
And `rm_between` from the qdapRegex package.
library(qdapRegex)
x <- 'strt111stpblablastrt222stp'
rm_between(x, 'strt', 'stp', extract=TRUE)[[1]]
# [1] "111" "222"
Problem
I am on the lookout for an efficient way to extract all matches between two substrings in a character string. E.g. say I want to extract all substrings contained between string ``` start="strt" ``` and ``` stop="stp" in string x="strt111stpblablastrt222stp" ``` I would like to get vector ``` "111" "222" ``` What is the most efficient way to do this in R? Using a regular expression perhaps? Or are there better ways?