it-swarm-es.tech

¿Cómo puedo poner en mayúscula la primera letra de cada palabra en una cadena en Perl?

¿Cuál es la forma más fácil de poner en mayúscula la primera letra de cada palabra de una cadena?

26
Dan Littlejohn

Ver las preguntas frecuentes .

No creo que ucfirst () satisfaga la pregunta del OP para poner en mayúscula la primera letra de cada palabra en una cadena sin dividir la cadena y unirla más tarde.

16
piCookie

Como @brian menciona en los comentarios, ¡la respuesta actualmente aceptada por @piCookie es incorrecta!

$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print; 

Esto imprimirá "¿Cuál es la respuesta incorrecta?" observe la S mayúscula erróneamente

Como FAQ dice que probablemente sea mejor usar

s/([\w']+)/\u\L$1/g

o Texto :: Autoformato

48
Pat

Eche un vistazo a la función cfirst .

$line = join " ", map {ucfirst} split " ", $line;
10
zigdon
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;

Al capturar el espacio en blanco, se inserta en la lista y se utiliza para reconstruir el espacio original. "ucfirst lc" capitaliza "teXT" a "Texto".

9
kixx
$string =~ s/(\w+)/\u$1/g;

debería funcionar bien

6
moritz

Esto capitaliza solo la primera palabra de cada línea:

Perl -ne "print (ucfirst($1)$2)  if s/^(\w)(.*)/\1\2/" file
2
alemol

Puede usar ' Título del caso ', es un código muy bueno escrito en Perl.

1
vsync

La función cfirst en un mapa ciertamente hace esto, pero solo de una manera muy rudimentaria. Si desea algo un poco más sofisticado, eche un vistazo a script de TitleCase de John Gruber .

0
RET

prueba esto :

echo "what's the wrong answer?" |Perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'

¿Cuál es la respuesta incorrecta?

0
bill god