web-dev-qa-db-fra.com

Comment puis-je mettre en majuscule la première lettre de chaque mot d'une chaîne en Perl?

Quel est le moyen le plus simple de mettre en majuscule la première lettre de chaque mot d'une chaîne?

25
Dan Littlejohn

Voir le faq .

Je ne crois pas que ucfirst () réponde à la question du PO de mettre en majuscule la première lettre de chaque mot d'une chaîne sans la scinder et la rejoindre plus tard.

16
piCookie

Comme @brian mentionne dans les commentaires, la réponse actuellement acceptée par @piCookie est fausse!

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

Cela affichera "Quelle est la mauvaise réponse?" remarquez le S mal capitalisé 

Comme le dit le FAQ , il vaut probablement mieux utiliser 

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

ou Texte :: Autoformat

45
Pat

Regardez la fonction ucfirst .

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

En capturant les espaces, il est inséré dans la liste et utilisé pour reconstruire l'espacement d'origine. "ucfirst lc" capitalise "teXT" en "texte".

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

devrait bien fonctionner

6
moritz

Ceci ne met en majuscule que le premier mot de chaque ligne:

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

Notez que la solution FAQ ne fonctionne pas si vous avez des mots en majuscules et que vous souhaitez les mettre en majuscules. Vous pouvez soit créer une expression rationnelle plus compliquée, soit simplement faire un lc sur la chaîne avant d'appliquer la solution FAQ.

1
Karen in Wichita

Vous pouvez utiliser ' Title Case ', c'est un morceau de code très cool écrit en Perl.

1
vsync

La fonction ucfirst sur une carte le fait certainement, mais seulement de manière très rudimentaire. Si vous voulez quelque chose d'un peu plus sophistiqué, jetez un coup d'œil à Le script TitleCase de John Gruber .

0
RET

essaye ça : 

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

Quelle est la mauvaise réponse?

0
bill god