Come posso rendere maiuscola la prima lettera di ogni parola in una stringa in Perl?
-
09-06-2019 - |
Domanda
Qual è il modo più semplice per rendere maiuscola la prima lettera di ogni parola di una stringa?
Soluzione
Vedere le domande frequenti.
Non credo che ucfirst() soddisfi la domanda dell'OP di rendere maiuscola la prima lettera di ogni parola in una stringa senza dividere la stringa e unirla successivamente.
Altri suggerimenti
Come menzionato da @brian nei commenti, la risposta attualmente accettata da @piCookie è sbagliata!
$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
Questo stamperà "Qual è la risposta sbagliata?" Notare la S erroneamente capitalizzata
Come il FAQ dice che probabilmente è meglio usare
s/([\w']+)/\u\L$1/g
Dai un'occhiata a ucfirst funzione.
$line = join " ", map {ucfirst} split " ", $line;
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
Catturando lo spazio bianco, questo viene inserito nell'elenco e utilizzato per ricostruire la spaziatura originale."ucfirst lc" rende maiuscolo "teXT" in "Testo".
$string =~ s/(\w+)/\u$1/g;
dovrebbe funzionare bene
Questo rende maiuscolo solo la prima parola di ogni riga:
perl -ne "print (ucfirst($1)$2) if s/^(\w)(.*)/\1\2/" file
Tieni presente che la soluzione delle domande frequenti non funziona se hai parole in maiuscolo e desideri invece che siano (solo) in maiuscolo.Puoi creare una regex più complicata o semplicemente eseguire un lc sulla stringa prima di applicare la soluzione FAQ.
Puoi usare 'Caso del titolo', è un pezzo di codice davvero interessante scritto in Perl.
IL ucfirst La funzione in una mappa fa certamente questo, ma solo in modo molto rudimentale.Se vuoi qualcosa di un po' più sofisticato, dai un'occhiata Script TitleCase di John Gruber.
prova questo :
echo "what's the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
Qual è la risposta sbagliata?