x <- c("1.8 20v 150cv turbo", "1.6 8v 102cv", "1.6 v8 102cv", "1.6 3-p", "ro 35i 3.0 24v 306cv", "polo 1.8 turbo") regmatches(x, gregexpr("\\bv?\\d+(?:\\.\\d+)?(?:c?v?|i)(?!\\S)", x, perl=TRUE))
Standard input is empty
[[1]] [1] "1.8" "20v" "150cv" [[2]] [1] "1.6" "8v" "102cv" [[3]] [1] "1.6" "v8" "102cv" [[4]] [1] "1.6" [[5]] [1] "35i" "3.0" "24v" "306cv" [[6]] [1] "1.8"