Tenho uma string onde desejo extrair o código do país, este sempre será na forma de letras maiúsculas com 3 caracteres.
mystring
"Bloggs, Joe GBR London (1)/Bloggs, Joe London (2)"
"Bloggs, Joe London (1)/Bloggs, Joe GBR London (2)"
"Bloggs, Joe London (1)/Bloggs, Joe London (2)"
"Bloggs, Joe GBR London (1)/Bloggs, Joe GBR London (2)"
"Bloggs, J-S GBR London (1)/Bloggs, J-S GBR London (2)"
O que estou tentando conseguir
mystring
GBR/
/GBR
/
GBR/GBR
GBR/GBR
Blanks are fine if there is no country, I can deal with them
Eu tentei algumas coisas que vi aqui, uma que tentou remover todos os caracteres que não são maiúsculos, mas depois fiquei com outras letras que não quero, como as maiúsculas do nome e localização. Tentei então fazer o mesmo, tentando remover todas as letras que não começam e terminam com maiúscula (também não tive alegria devido a problemas de nome);
gsub("[^A-Z$]", "", mystring)
Se eu apenas mantiver todas as letras maiúsculas onde há 3 letras que podem funcionar, mas não consigo acertar o código, acho que seria algo como abaixo se alguém conhecesse ou conhecesse um método mais robusto;
gsub("[^A-Z$]{3}", "", mystring)
Gosto
stringr::str_extract
de extrair padrões de strings. Isso permite que você simplesmente insira o padrão desejado, em vez de tentar substituir todo o resto:É possível fazer o mesmo na base R usando
substring
ouregmatches
eregexpr
como visto nas respostas aqui .