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

StackOverflow https://stackoverflow.com/questions/77226

  •  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?

Était-ce utile?

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

<*>

ou Text :: Autoformat

="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

<*>

ou Text :: Autoformat

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top