Tenho uma string na qual desejo remover o caractere especial e letras/números ao redor do caractere especial. A string nem sempre terá o mesmo comprimento.
myString
"a-a b-b cc-cc*"
"1-1 *bb-bb"
"aa-bb*"
"aa-aa *3b-3b"
Estou tentando remover o caractere especial e quaisquer letras/números que o cercam para que fique assim:
myString
"a-a b-b"
"1-1"
""
"aa-aa"
Faça isso
Resultado
Explicação de
gsub
\\w+-\\w+\\*
: caracteres de palavras com "-" seguido de "*" OU\\*\\w+-\\w+
: * seguido por caracteres de palavras com "-" OU\\w+\\*\\w+
: caracteres de palavra, depois "*", depois caracteres de palavratrimws()
remove os espaços restantesA resposta básica do R é ótima - uma abordagem do tidyverse usando
stringr
alguma regex reduzida seria:Outra regex seria:
Se pudéssemos apenas procurar por um
*
que segue ou é seguido por qualquer caractereIsso pode reduzir a complexidade da expressão regular.
Já existem algumas respostas excelentes, mas aqui vai uma que é um pouco mais simples. Os padrões
\\s
and\\w
dependem de expressões regulares Perl, eu não os uso abaixo, mas se você estiver usandoperl=TRUE
, eles podem simplificar as coisas.Como as expressões regulares são, por padrão, gananciosas, ou mais longas à esquerda, não precisamos usar "ou"
|
, classes de caracteres e possíveis correspondências de comprimento zero funcionarão.Então, um padrão básico é:
Isso deixa os espaços, para removê-los também, use: