[R-br] Tirar maiuscula apos o ponto

Bernardo Rangel Tura tura em centroin.com.br
Segunda Março 24 16:29:47 BRT 2014


On 03/23/2014 12:31 PM, jimmy wrote:
> Saudações Rodrigo Coster,
>
> On Sat, Mar 22, 2014 at 09:54:35PM -0300, Rodrigo Coster wrote:
>> A tua expressão tem alguns  problemas... A expressão ". [A-Z]" captura
>> qualquer caractere (e não somente ponto),  seguido por um espaço e uma
>> letra maiúscula (http://regex101.com/r/hG9uK2). Para capturar o ponto,
>> precisa usar \\. no lugar
>>
>> Segue uma  solução: gsub('(?<=\\.  )([A-Z])', '\\L\\1', texto,  perl =
>> TRUE) e a explicação em: http://regex101.com/r/xV7zE0
>>
>> Único  problema é  que frases  que iniciam  com letras  acentuadas não
>> funciona (se  alguém souber resolver, eu  agradeço, pq isso me  da uma
>> baita dor de cabeça as vezes)
> Você pode usar algumas soluções para resolver este problema:
>
> - Ao invés de usar "[A-Z]" como intervalo, usar a classe POSIX
>    "[:upper:]".
>
> - Declarar explicitamente  quais  caracteres deseja  modificar o  caso.
>    Exemplo: "[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]"
>
> - Usar a unicode property \p{Lu}.
>
> Todas essas soluções  são bastante genéricas e  podem apresentar efeitos
> colaterais dependendo  do conteúdo de  "texto". Um exemplo que  já posso
> prever  agora será  quando  "texto" tiver  abreviações,  "Dr. José  ..."
> ficará como "Dr. josé ...".
>
> --
> "Não manejo bem as palavras
> Mas manipulo bem as strings."
> ------------------------------
> http://tecnoveneno.blogspot.com

jimmy,

Nesta caso a comando ficaria assim:
gsub('(?<=\\.  )([:upper:])', '\\L\\1', texto,  perl =TRUE)
Mas aqui não funcionou ... Onde está o meu erro ?

[]s
Tura



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