I am not sure what do you want to extract but following will help you get started.
grepl
will return vector of boolean values based on which ifelse
will element-wise choose from vector u
or vector resulting from gsub("^(.*) ?([A-Z]+) ?(.*)", "\\1 \\2", u)
ifelse((grepl("(TEST2|TEST1)", u, perl = T)), u, gsub("^(.*) ?([A-Z]+) ?(.*)", "\\1 \\2", u))
## [1] "18 ABC TEST1 17" "AB C"