31

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

4

10 回答 10

52

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

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

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

正如常见问题解答所说,您最好使用

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

文本::自动格式化

于 2008-10-02T18:27:06.587 回答
18

请参阅常见问题解答

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

于 2008-09-16T21:19:29.383 回答
13

看一下ucfirst函数。

$line = join " ", map {ucfirst} split " ", $line;
于 2008-09-16T21:17:52.710 回答
11
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;

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

于 2008-10-08T10:49:54.630 回答
6
$string =~ s/(\w+)/\u$1/g;

应该可以正常工作

于 2008-09-16T22:14:12.123 回答
2

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

perl -ne "print (ucfirst($1)$2)  if s/^(\w)(.*)/\1\2/" file
于 2012-02-29T23:37:09.303 回答
1

请注意,如果您的单词全部大写并且您希望它们(仅)大写,则常见问题解答解决方案不起作用。您可以制作更复杂的正则表达式,或者在应用常见问题解答解决方案之前对字符串执行 lc。

于 2008-09-16T22:56:39.137 回答
1

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

于 2010-02-25T14:29:00.213 回答
1

试试这个 :

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

输出将是:

What's The Wrong Answer?
于 2017-11-24T16:56:27.913 回答
-1

map 中的ucfirst函数当然可以做到这一点,但只是以非常基本的方式。如果您想要更复杂的东西,请查看John Gruber 的 TitleCase 脚本

于 2008-09-17T02:41:36.443 回答