perl - regular - primera letra de cada palabra en mayuscula sql
¿Cómo puedo escribir en mayúscula la primera letra de cada palabra en una cadena en Perl? (10)
Como @brian menciona en los comentarios, ¡la respuesta aceptada actualmente por @piCookie es incorrecta!
$_="what''s the wrong answer?";
s//b(/w)//U$1/g
print;
Esto imprimirá "¿Cuál es la respuesta incorrecta?" notar el S mal capitalizado
Como dice la FAQ , probablemente estés mejor usando
s/([/w'']+)//u/L$1/g
¿Cuál es la forma más fácil de escribir en mayúscula la primera letra de cada palabra de una cadena?
Eche un vistazo a la función ucfirst .
$line = join " ", map {ucfirst} split " ", $line;
Esto solo capitaliza la primera palabra de cada línea:
perl -ne "print (ucfirst($1)$2) if s/^(/w)(.*)//1/2/" file
La función ucfirst 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 la secuencia de comandos TitleCase de John Gruber .
Puedes usar '' Title Case '', es una pieza muy genial de código escrita en Perl.
Tenga en cuenta que la solución de preguntas frecuentes no funciona si tiene palabras que están en mayúsculas y desea que sean (solo) en mayúsculas. Puede hacer una expresión regular más complicada, o simplemente hacer un lc en la cadena antes de aplicar la solución de preguntas frecuentes.
Ver el faq .
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.
prueba esto :
echo "what''s the wrong answer?" |perl -pe ''s/^/ /; s//s(/w+)/ /u$1/g; s/^ //''
¿Cuál es la respuesta incorrecta?
$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 espaciado original. "ucfirst lc" escribe "teXT" en "Texto".
$string =~ s/(/w+)//u$1/g;
debería funcionar bien