it-swarm.dev

Come posso capitalizzare la prima lettera di ogni parola in una stringa in Perl?

Qual è il modo più semplice per capitalizzare la prima lettera in ogni parola di una stringa?

25
Dan Littlejohn

Vedi il faq .

Non credo che ucfirst () soddisfi la domanda dell'OP per capitalizzare la prima lettera di ogni parola in una stringa senza dividere la stringa e unirla in seguito.

16
piCookie

Come @brian sta citando 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?" si noti la S erroneamente capitalizzata 

Poichè FAQ dice che probabilmente stai meglio usando 

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

o Testo :: Autoformat

45
Pat

Dai un'occhiata a ucfirst function.

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

Catturando lo spazio bianco, viene inserito nell'elenco e utilizzato per ricostruire la spaziatura originale. "ucfirst lc" capitalizza "teXT" in "Testo".

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

dovrebbe funzionare bene

6
moritz

Questo capitalizza solo la prima parola di ogni riga:

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

Si noti che la soluzione FAQ non funziona se si dispone di parole in maiuscolo e si desidera che siano (solo) in maiuscolo. È possibile eseguire un'espressione regolare più complicata oppure eseguire semplicemente un lc sulla stringa prima di applicare la soluzione FAQ.

1
Karen in Wichita

Puoi usare ' Title Case ', è un pezzo di codice molto interessante scritto in Perl.

1
vsync

La funzione ucfirst in una mappa lo fa certamente, ma solo in un modo molto rudimentale. Se vuoi qualcosa di un po 'più sofisticato, dai un'occhiata a Lo script di TitleCase di John Gruber .

0
RET

prova questo : 

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

Qual è la risposta sbagliata?

0
bill god