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

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

How can I capitalize the first letter of each word in a string in Perl?

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


正如@brian在评论中提到的那样,@ piCookie当前接受的答案是错误的!

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

这将打印"什么是错误的答案?"注意大小写错误的S

如常见问题解答所述,您可能最好使用

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

或Text :: Autoformat


参见常见问题解答。

我不相信ucfirst()满足OP的问题,即在不分割字符串并稍后将其连接的情况下,将字符串中每个单词的首字母大写。


看一下ucfirst函数。

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

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

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


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

应该很好


这仅大写每行的第一个单词:

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


尝试这个 :

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

输出将是:

1
What's The Wrong Answer?

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


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


映射中的ucfirst函数当然可以执行此操作,但是仅以非常简单的方式进行。如果您想要更高级的内容,请查看John Gruber的TitleCase脚本。


推荐阅读