Frage

Was ist der einfachste Weg, um die ersten Buchstaben in jedem Wort einer Zeichenfolge zu nutzen?

War es hilfreich?

Lösung

Siehe die FAQ .

Ich glaube nicht, ucfirst () die Frage des OP erfüllt den ersten Buchstaben jedes Wortes in einem String zu nutzen, ohne dass die Zeichenkette aufteilen und später beitreten.

Andere Tipps

Wie @ Brian in den Kommentaren ist zu erwähnen, die derzeit akzeptierte Antwort von @piCookie ist falsch!

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

Dies wird gedruckt „Was die falsche Antwort ist?“ Beachten Sie die fälschlicherweise aktiviert S

Wie die FAQ sagt, Sie wahrscheinlich besser dran mit

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

oder Text :: Autoformat

Werfen Sie einen Blick auf die ucfirst Funktion.

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

das Leerzeichen Durch die Erfassung, wird es in der Liste eingefügt und verwendet, um den ursprünglichen Abstand wieder aufzubauen. "Ucfirst lc" kapitalisiert "Text" auf "Text".

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

sollte gut funktionieren

Diese nutzt nur das erste Wort jeder Zeile:

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

Beachten Sie, dass die FAQ-Lösung nicht, wenn Sie Wörter haben nicht funktioniert, die in allen Caps sind und Sie wollen, dass sie (nur) werden aktiviert, statt. Sie können entweder eine kompliziertere regex machen, oder einfach eine lc auf der Saite vor der FAQ-Lösung anwenden.

Sie können mit ' Titel Case ', es ist ein sehr cooles Stück Code geschrieben in Perl.

Die ucfirst Funktion in einer Karte tut dies sicherlich, aber nur in einem sehr rudimentär. Wenn Sie etwas ein bisschen mehr anspruchsvolle wollen, haben einen Blick auf John Grubers Titlecase Skript .

versuchen Sie dies:

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

Was ist die falsche Antwort?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top