Comment puis-je mettre en majuscule la première lettre de chaque mot d'une chaîne en Perl?
-
09-06-2019 - |
Question
Quel est le moyen le plus simple de mettre en majuscule la première lettre de chaque mot d'une chaîne?
La solution
Voir la 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.
Autres conseils
Comme @brian le mentionne dans les commentaires, la réponse actuellement acceptée par @piCookie est fausse!
Comme @brian le mentionne dans les commentaires, la réponse actuellement acceptée par @piCookie est fausse!
s/([\w']+)/\u\L$1/g
Ceci imprimera "Quelle est la mauvaise réponse?" remarquez le S mal capitalisé
Comme la FAQ , vous êtes probablement mieux d'utiliser
<*>
="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
Ceci imprimera "Quelle est la mauvaise réponse?" remarquez le S mal capitalisé
Comme la FAQ , vous êtes probablement mieux d'utiliser
<*>Examinez la fonction ucfirst .
$line = join " ", map {ucfirst} split " ", $line;
$capitalized = join '', map { ucfirst lc <*>
En capturant les espaces, il est inséré dans la liste et utilisé pour reconstruire l'espacement d'origine. "ucfirst lc" capitalise " teXT " pour "Texte".
} 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 " pour "Texte".
$string =~ s/(\w+)/\u$1/g;
devrait fonctionner très bien
Ceci ne met en majuscule que le premier mot de chaque ligne:
perl -ne "print (ucfirst($1)$2) if s/^(\w)(.*)/\1\2/" file
Notez que la solution de la FAQ ne fonctionne pas si vous avez des mots en majuscules et que vous voulez qu'ils soient en majuscule. 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 de la FAQ.
Vous pouvez utiliser ' Title Case ', c'est un très bon code écrit en Perl.
La fonction ucfirst sur une carte le fait certainement, mais seulement dans un très manière rudimentaire. Si vous souhaitez quelque chose d'un peu plus sophistiqué, consultez le le script TitleCase de John Gruber .
essayez ceci:
echo "what's the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
Quelle est la mauvaise réponse?