Лучший способ - использовать \\b
, как отметили другие. В качестве альтернативы вы можете использовать положительный просмотр вперед:
Данные:
x <- c("FLT1", "FLT1P1", "FLT1-FLT2", "SGY-FLT1, GPD")
Решение:
grep("FLT1(?=$|-|,)", x, perl = T, value = T)
[1] "FLT1" "FLT1-FLT2" "SGY-FLT1, GPD"
Здесь grep
соответствует FLT1
if , и только в том случае, если сразу следующим будет либо конец строки ($
), либо -
, либо ,
. Подразумевается, что он не совпадает, если следующий сразу за символом является, например, буквенно-цифровыми c.
Или, если вы хотите исключить значения, в которые добавлены буквенно-цифровые c символы, вы можно использовать отрицательное опережающее:
grep("FLT1(?!\\w)", x, perl = T, value = T)
[1] "FLT1" "FLT1-FLT2" "SGY-FLT1, GPD"