如何将Perl中字符串中每个单词的首字母大写?

时间:2008-09-16 21:17:00

标签: perl capitalize title-case

将字符串的每个单词中的第一个字母大写的最简单方法是什么?

10 个答案:

答案 0 :(得分:46)

@brian在评论中提及@piCookie目前接受的答案是错误的!

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

这将打印出“错误的答案是什么?”注意错误的大写S

正如FAQ所说,你最好使用

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

Text::Autoformat

答案 1 :(得分:16)

请参阅the faq

我不相信ucfirst()满足OP的问题来大写字符串中每个单词的第一个字母而不分割字符串并稍后加入。

答案 2 :(得分:10)

查看ucfirst功能。

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

答案 3 :(得分:9)

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

通过捕获空白,它将插入列表中并用于重建原始间距。 “ucfirst lc”将“teXT”大写为“Text”。

答案 4 :(得分:6)

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

应该可以正常工作

答案 5 :(得分:2)

这只是每行的第一个单词:

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

答案 6 :(得分:1)

请注意,如果您的单词是全大写的,并且您希望它们(仅)大写,那么FAQ解决方案就不起作用了。在应用FAQ解决方案之前,您可以制作更复杂的正则表达式,也可以只对字符串执行lc。

答案 7 :(得分:1)

您可以使用“Title Case”,它是用Perl编写的非常酷的代码。

答案 8 :(得分:0)

地图中的ucfirst功能肯定会这样做,但只是以非常基本的方式。如果您想要更复杂的东西,请查看John Gruber's TitleCase script

答案 9 :(得分:0)

试试这个:

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

什么是错误的答案?