[R-br] Regexp no grep para linhas que não iniciam com sequência

Éder Comunello comunello.eder em gmail.com
Terça Outubro 4 16:01:21 BRT 2016


Pessoal, obrigado pelas dicas!

Tive sucesso com a sugestão do Marcus e acabei encontrando mais uma forma,
transcrita abaixo.

test <- c("SPA100", "MSA200", "MSB300", "MSC400", "MSC500", "PRA100",
"PRC200", "MGV100", "MTJ400", "MTK500")

grep("MSC", test, val=T, invert=T)
# [1] "SPA100" "MSA200" "MSB300" "PRA100" "PRC200" "MGV100" "MTJ400"
"MTK500"

grep("^(?!MSC)", test, val=T, perl=T)
# [1] "SPA100" "MSA200" "MSB300" "PRA100" "PRC200" "MGV100" "MTJ400"
"MTK500"


================================================
Éder Comunello
Researcher at Brazilian Agricultural Research Corporation (Embrapa)
DSc in Agricultural Systems Engineering (USP/Esalq)
MSc in Environ. Sciences (UEM), Agronomist (UEM)
---
Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>|
================================================
GEO, -22.2752, -54.8182, 408m
UTC-04:00 / DST: UTC-03:00




Em 4 de outubro de 2016 10:25, Tiago Fragoso <mingote em gmail.com> escreveu:

> Oi
>
> Estou longe do R no momento, mas na sua segunda solução, você tentou usar
> a regex "^[^MSC]{0,3}"?
>
> Em princípio, ela força o início da string e identifica todos os
> caracteres fora do conjunto MSC, para valores entre 0 e 3 ocorrências.
>
> Note que nesse caso a regex vai identificar strings iniciadas em M,S ou C.
> Me parece que você tem os padrões M, MS ou MSC, então talvez a regex
>
> "^[^M|^MS|^MSC]"
>
> resolva.
>
> On Oct 4, 2016 9:49 AM, "Éder Comunello via R-br" <
> r-br em listas.c3sl.ufpr.br> wrote:
>
>> Senhores, bom dia!
>>
>> Considerando o vetor:
>>
>> test <- c("SPA100", "MSA200", "MSB300", "MSC400", "MSC500",
>>           "PRA100", "PRC200", "MGV100", "MTJ400", "MTK500")
>>
>> Posso obter facilmente os valores iniciados com a sequência "MS":
>> grep("^MS", test, val=T)
>>
>> # [1] "MSA200" "MSB300" "MSC400" "MSC500"
>>
>>
>> Uma primeira tentativa, sem sucesso, para obter linhas que não iniciam
>> com a sequência foi:
>> grep("^!(MS)", test, val=T)
>> # character(0)
>>
>> Consegui uma solução estranha com:
>> grep("^[^M]|^M[^S]", test, val=T)
>>
>> # [1] "SPA100" "PRA100" "PRC200" "MGV100" "MTJ400" "MTK500"
>>
>>
>> Mas essa solução é limitada quando usando strings maiores, tal como
>> "MSC".
>>
>> Embora existam alternativas como:
>> test[-grep("^MSC", test)]
>>
>> # [1] "SPA100" "MSA200" "MSB300" "PRA100" "PRC200" "MGV100" "MTJ400" "MTK500"
>>
>>
>> Gostaria de saber se há uma forma fácil de fazer isso usando diretamente
>> uma regexp.
>>
>> Grato,
>>
>> ================================================
>> Éder Comunello
>> Researcher at Brazilian Agricultural Research Corporation (Embrapa)
>> DSc in Agricultural Systems Engineering (USP/Esalq)
>> MSc in Environ. Sciences (UEM), Agronomist (UEM)
>> ---
>> Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>|
>> ================================================
>> GEO, -22.2752, -54.8182, 408m
>> UTC-04:00 / DST: UTC-03:00
>>
>>
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20161004/6914cdae/attachment.html>


Mais detalhes sobre a lista de discussão R-br