
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.