• Publicidad

Convertir mayúsculas después de punto

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Convertir mayúsculas después de punto

Notapor sisifo80 » 2014-01-02 07:39 @360

Hola,

Necesitaba convertir todas las mayúsculas después de un punto a minúsculas. Sé que para convertir todas las mayúsculas a minúsculas se podría hacer así:

open F, shift;
while (<F>) {
$_ =~ tr/[A-Z]/[a-z]/;
print;
}
close F;

Pero, ¿cómo puedo hacer para convertir solo las mayúsculas que van después de punto? Intenté algo como lo siguiente:

open F, shift;
while (<F>) {
if (/\.\s([A-Z])/) {
$1 =~ tr/[A-Z]/[a-z]/};
print;
}
close F;

Es decir: si tengo un punto (.), un espacio (\s) y una mayúscula ([A-Z]) conviérteme la mayúscula en minúscula. Pero parece ser que esta opción es incorrecta...

¿Alguna sugerencia? Gracias.
sisifo80
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-20 07:30 @354

Publicidad

Re: Convertir mayúsculas después de punto

Notapor explorer » 2014-01-02 08:08 @380

Para convertir mayúsculas a minúsculas, es mejor usar la función lc() (lowercase), o lcfirst() (lowercase first char), ya que tiene en cuenta la localización en la que estamos trabajando. Si usas [A-Z], te estás olvidando del caso de la 'Ñ' :)
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. > perl -CAS -E 'use utf8; $x = "Ñandú"; $x =~ tr/A-Z/a-z/; say $x'
  2. Ñandú
  3. > perl -CAS -E 'use utf8; $x = "Ñandú"; $x = lc $x; say $x'
  4. ñandú
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Quedaría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use autodie;
  3.  
  4. open my $F, shift;
  5. while (<$F>) {
  6.     s/\.\s\K(\w)/lc($1)/ge;
  7.     print;
  8. }
  9. close $F;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La expresión regular quiere decir: aplicar a $_, ya que es la variable por defecto, la operación de sustitución de un patrón por la ejecución (/e) de un trozo de código Perl (lc($1)), a lo largo de toda la variable (/g).

El patrón es:
  • buscamos un punto seguido por un espacio en blanco y seguido por un carácter alfanumérico (\w)
  • si encontramos ese patrón, nos olvidamos del punto y del espacio (\K),
  • y nos quedamos (capturamos) el carácter alfanumérico, con la ayuda de los paréntesis

Prueba:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. > perl -CAS -E 'use utf8; $x = "La gaviota comió pan. El ñandú, no. Pero el gato, sí."; $x =~ s/\.\s\K(\w)/lc($1)/ge; say $x'      
  2. La gaviota comió pan. el ñandú, no. pero el gato, sí.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Convertir mayúsculas después de punto

Notapor sisifo80 » 2014-01-02 08:16 @386

¡¡Mil gracias!! Por la solución y por la explicación. Me quedó muy claro.
sisifo80
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-20 07:30 @354


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado