Как я могу прописать первую букву каждого слова в строке в Perl?

каков самый простой способ заглавной буквы в каждом слове строки?

10 ответов


посмотреть faq.

Я не верю, что ucfirst () удовлетворяет вопросу OP, чтобы заглавно записать первую букву каждого слова в строке без разделения строки и присоединения к ней позже.


Как @brian упоминает в комментариях, в настоящее время принятый ответ @piCookie неверен!

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

это напечатает "что неправильный ответ?"обратите внимание на неправильно заглавную S

Как часто задаваемые вопросы говорит, что вам, вероятно, лучше использовать

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

или Text:: Autoformat


посмотри ucfirst.

$line = join " ", map {ucfirst} split " ", $line;

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

захватывая пробелы, он вставляется в список и используется для восстановления исходного интервала. "ucfirst lc" капитализирует " текст "в"Text".


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

должно работать нормально


этот прописной только первое слово каждой строки:

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

обратите внимание, что решение FAQ не работает, если у вас есть слова, которые находятся в all-caps, и вы хотите, чтобы они были (только) капитализированы. Вы можете либо сделать более сложное регулярное выражение, либо просто сделать lc на строке перед применением решения FAQ.


вы можете использовать 'Title Case', это очень крутой кусок кода, написанный на Perl.


на ucfirst функция на карте, конечно, делает это, но только очень рудиментарным способом. Если вы хотите что-то более сложное, посмотрите на сценарий TitleCase Джона Грубера.


попробуйте это :

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

что неправильный ответ?