Wie kann ich den ersten Buchstaben jedes Wortes in einem String in Perl nutzen?
-
09-06-2019 - |
Frage
Was ist der einfachste Weg, um die ersten Buchstaben in jedem Wort einer Zeichenfolge zu nutzen?
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?