it-swarm-pt.tech

Como posso capitalizar a primeira letra de cada palavra em uma string em Perl?

Qual é a maneira mais fácil de capitalizar a primeira letra em cada palavra de uma string?

25
Dan Littlejohn

Veja o faq .

Eu não acredito que o ucfirst () satisfaça a pergunta do OP para capitalizar a primeira letra de cada Word em uma string sem dividir a string e juntá-la depois.

16
piCookie

Como @brian está mencionando nos comentários, a resposta aceita atualmente por @piCookie está errada!

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

Isto irá imprimir "Qual é a resposta errada?" observe o S incorretamente capitalizado 

Como o FAQ diz que você provavelmente está melhor usando 

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

ou Texto :: Autoformatação

45
Pat

Dê uma olhada na função ucfirst .

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

Ao capturar o espaço em branco, ele é inserido na lista e usado para reconstruir o espaçamento original. "ucfirst lc" capitaliza "teXT" em "Texto".

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

deve funcionar bem

6
moritz

Isso capitaliza apenas o primeiro Word de cada linha:

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

Observe que a solução FAQ não funciona se você tiver palavras que estão em maiúsculas e deseja que elas sejam (apenas) em maiúsculas. Você pode fazer um regex mais complicado ou apenas fazer um lc na string antes de aplicar a solução FAQ.

1
Karen in Wichita

Você pode usar ' Title Case ', é um trecho de código muito legal escrito em Perl.

1
vsync

O ucfirst function em um mapa certamente faz isso, mas apenas de uma maneira muito rudimentar. Se você quiser algo um pouco mais sofisticado, dê uma olhada em o script TitleCase de John Gruber .

0
RET

tente isso: 

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

Qual é a resposta errada?

0
bill god