Comment puis-je capitaliser la première lettre de chaque mot dans une chaîne de caractères en Perl?
Quelle est la façon la plus facile de capitaliser la première lettre dans chaque mot d'une chaîne de caractères?
10 réponses
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
en capturant l'espace blanc, il est inséré dans la liste et utilisé pour reconstruire l'espacement original. "ucfirst lc "majuscule" texte "en"texte".
ceci ne majuscule que le premier mot de chaque ligne:
perl -ne "print (ucfirst()) if s/^(\w)(.*)//" file
notez que la solution FAQ ne fonctionne pas si vous avez des mots qui sont dans all-caps et que vous voulez qu'ils soient (seulement) capitalisés à la place. Vous pouvez soit faire un regex plus compliqué, soit simplement faire un lc sur la chaîne avant d'appliquer la solution FAQ.
ucfirst fonction dans une carte fait certainement cela, mais seulement d'une manière très rudimentaire. Si vous voulez quelque chose d'un peu plus sophistiqué, jetez un oeil à John Gruber de TitleCase script.
essaye ceci :
echo "what's the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u/g; s/^ //'
Quelle est la mauvaise réponse?