Как проще всего сделать заглавной первую букву в каждом слове строки?
Как в Perl сделать заглавной первую букву каждого слова в строке?
Ответы (10)
Я не верю, что ucfirst()
удовлетворяет вопрос ОП о том, чтобы сделать первую букву каждого слова в строке заглавной, не разделяя строку и не присоединяя ее позже.
Как упоминает @brian в комментариях, принятый в настоящее время ответ @piCookie неверен!
$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
Это напечатает "Какой неправильный ответ?" обратите внимание на неправильно написанную заглавную букву S
Как сказано в FAQ, вам, вероятно, лучше использовать
s/([\w']+)/\u\L$1/g
или Text::Autoformat
Взгляните на функцию ucfirst.
$line = join " ", map {ucfirst} split " ", $line;
$line = join " ", map {ucfirst} split / /, $line;
(обратите внимание на изменение на /)
- person Ether; 10.10.2009
\t
).
- person mklement0; 25.10.2015
ucfirst
на самом деле не переводит строку в нижний регистр. Заглавный регистр не FOO
, и это не исправит.
- person Evan Carroll; 09.08.2019
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
При захвате пробела он вставляется в список и используется для восстановления исходного интервала. «ucfirst lc» заменяет «текст» на «текст».
"bill o’hanlon"
.
- person Asim Jalis; 30.06.2016
split /(\W+)/
.
- person kixx; 17.08.2016
$string =~ s/(\w+)/\u$1/g;
должно работать нормально
s/ (\w+)/\u$1/g;
.
- person HoldOffHunger; 27.08.2018
При этом заглавными буквами пишется только первое слово каждой строки:
perl -ne "print (ucfirst($1)$2) if s/^(\w)(.*)/\1\2/" file
Обратите внимание, что решение часто задаваемых вопросов не работает, если у вас есть слова, написанные заглавными буквами, и вы хотите, чтобы вместо этого они были (только) заглавными. Вы можете либо сделать более сложное регулярное выражение, либо просто сделать lc в строке, прежде чем применять решение часто задаваемых вопросов.
Вы можете использовать 'Title Case', это очень классный фрагмент кода, написанный на Perl.
попробуй это :
echo "what's the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
Вывод будет:
What's The Wrong Answer?
Функция ucfirst на карте, безусловно, делает это, но только очень примитивным образом. Если вы хотите что-то более сложное, взгляните на скрипт TitleCase Джона Грубера.