it-swarm-eu.dev

Wie kann ich den ersten Buchstaben jedes Wortes in einer Zeichenfolge in Perl groß schreiben?

Was ist der einfachste Weg, den ersten Buchstaben in jedem Wort eines Strings in Großbuchstaben zu schreiben?

25
Dan Littlejohn

Siehe die FAQ .

Ich glaube nicht, dass ucfirst () die Frage des OPs befriedigt, den ersten Buchstaben jedes Wortes in einer Zeichenfolge groß zu schreiben, ohne die Zeichenfolge zu teilen und sie später zu verbinden.

16
piCookie

Wie @brian in den Kommentaren erwähnt, ist die aktuell akzeptierte Antwort von @piCookie falsch!

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

Dies wird "Was ist die falsche Antwort?" Beachten Sie das falsch kapitalisierte S 

Wie das FAQ sagt, sind Sie wahrscheinlich besser dran 

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

oder Text :: Autoformat

45
Pat

Schauen Sie sich die Funktion ucfirst an.

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

Durch das Erfassen des Leerraums wird es in die Liste eingefügt und zum Wiederherstellen des ursprünglichen Abstands verwendet. "ucfirst lc" schreibt "text" in "text".

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

sollte gut funktionieren

6
moritz

Dabei wird nur das erste Wort jeder Zeile großgeschrieben:

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

Beachten Sie, dass die Lösung FAQ nicht funktioniert, wenn Sie Wörter haben, die in Großbuchstaben angegeben sind und stattdessen (nur) Großbuchstaben verwenden sollen. Sie können entweder einen komplizierteren Regex erstellen oder einfach einen String mit dem String ausführen, bevor Sie die Lösung FAQ anwenden.

1

Sie können ' Title Case ' verwenden, ein sehr cooler Code, der in Perl geschrieben wurde.

1
vsync

Die ucfirst - Funktion in einer Karte macht dies sicherlich, aber nur in sehr rudimentärer Weise. Wenn Sie etwas anspruchsvolleres wollen, schauen Sie sich das John Gruber's TitleCase-Skript an.

0
RET

versuche dies : 

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

Was ist die falsche Antwort?

0
bill god