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?

25
demandé sur brian d foy 2008-09-17 01:17:00

10 réponses

Voir la faq.

Je ne crois pas que ucfirst () satisfasse à la question de L'OP de capitaliser la première lettre de chaque mot dans une chaîne sans fendre la chaîne et la rejoindre plus tard.

15
répondu piCookie 2015-01-22 14:22:11
$_="what's the wrong answer?";
s/\b(\w)/\U/g
print; 

ceci imprimera "Quelle est la mauvaise réponse?"remarquez les majuscules à tort!--3-->

FAQ dit qu'il est probablement préférable d'utiliser

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

ou Texte::Mise En Forme Automatique

45
répondu Pat 2013-09-30 16:19:42

regardez ucfirst fonction.

$line = join " ", map {ucfirst} split " ", $line;
10
répondu zigdon 2008-09-16 21:17:52
$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".

9
répondu kixx 2018-08-27 18:21:41
$string =~ s/(\w+)/\u/g;

devrait fonctionner très bien

6
répondu moritz 2008-09-16 22:14:12

ceci ne majuscule que le premier mot de chaque ligne:

perl -ne "print (ucfirst())  if s/^(\w)(.*)//" file
2
répondu alemol 2012-03-01 00:41:40

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.

1
répondu 2008-09-16 22:56:39

Vous pouvez utiliser 'Titre

1
répondu vsync 2015-01-22 17:00:32

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.

0
répondu RET 2010-01-05 12:54:27

essaye ceci :

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

Quelle est la mauvaise réponse?

0
répondu bill god 2017-11-24 17:16:51