Команда gsub
удаляет части текста, совпадающие с регулярным выражением.\s[A-Z]{2}\s
находит полосы пробелов, 2 заглавные буквы ASCII и пробелы и удаляет их из символьных векторов.
Вы можете использовать
x <- c('AAPL US Equity','1836 JP Equity','APPLE SOMETHING NOT','C US Equity')
sub(".*\\s+([A-Z]{2})\\s.*|.*", "\\1", x)
# => [1] "US" "JP" "" "US"
Здесь альтернатива .*\\s+([A-Z]{2})\\s.*
соответствует этим входным даннымкоторые имеют двухбуквенное «слово» между пробелами и помещают слова в Группу 1 (\1
), в то время как альтернатива .*
сопоставляет все остальные входные данные, чтобы выдать пустой результат в виде операции sub
.
Или вы можете использовать
library(stringr)
str_extract(x, "(?<=\\s)[A-Z]{2}(?=\\s)")
# => [1] "US" "JP" NA "US"
Здесь (?<=\\s)[A-Z]{2}(?=\\s)
соответствует и str_extract
извлекает строки, которые являются первыми двухбуквенными словами между пробелами.
Если слова могут быть вначало / конец строки используют
str_extract(x, "(?<!\\S)[A-Z]{2}(?!\\S)")