eu ja' perdi o bonde ha' algum tempo, mas usaria algo como:

gsub("(\\.\\s)(\\s*)([[:alpha:]])+", "\\1\\U\\3", texto, perl=TRUE)

(onde "\\s*" e' so' p resolver casos de multiplos espacos apos o ponto final)

b


Em 24 de março de 2014 16:29, Bernardo Rangel Tura <tura@centroin.com.br> escreveu:
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


_______________________________________________
R-br mailing list
R-br@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.