it-swarm-ru.tech

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

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

25
Dan Littlejohn

Смотрите FAQ .

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

16
piCookie

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

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

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

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

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

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

45
Pat

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

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

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

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

должно работать просто отлично

6
moritz

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

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

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

1
Karen in Wichita

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

1
vsync

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

0
RET

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

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

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

0
bill god