Как я могу использовать первую букву каждого слова в строке в Perl? - PullRequest
26 голосов
/ 17 сентября 2008

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

Ответы [ 10 ]

46 голосов
/ 02 октября 2008

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

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

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

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

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

или Текст :: Автоформат

16 голосов
/ 17 сентября 2008

См. FAQ .

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

10 голосов
/ 17 сентября 2008

Посмотрите на функцию ucfirst .

$line = join " ", map {ucfirst} split " ", $line;
9 голосов
/ 08 октября 2008
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;

Захватив пробел, он вставляется в список и используется для восстановления исходного интервала «ucfirst lc» превращает «teXT» в «текст».

6 голосов
/ 17 сентября 2008
$string =~ s/(\w+)/\u$1/g;

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

2 голосов
/ 01 марта 2012

Это заглавная буква только первого слова каждой строки:

perl -ne "print (ucfirst($1)$2)  if s/^(\w)(.*)/\1\2/" file
1 голос
/ 25 февраля 2010

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

1 голос
/ 17 сентября 2008

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

0 голосов
/ 24 ноября 2017

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

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

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

0 голосов
/ 17 сентября 2008

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

...