
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