s = 'the brown fox'

...在这里做点什么……

S应为:

'The Brown Fox'

最简单的方法是什么?


当前回答

不要忽视空白的保留。如果你想处理“fred flinstone”,你得到的是“fred flinstone”而不是“fred flinstone”,你已经破坏了你的空白空间。上面的一些解决方案会丢失空白。这里有一个解决方案,适用于Python 2和3,并保留了空白。

def propercase(s):
    return ''.join(map(''.capitalize, re.split(r'(\s+)', s)))

其他回答

.title()方法不能很好地工作,

>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"

试试string.capwords()方法,

import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"

来自Python capwords文档:

使用str.split()将参数拆分为单词,使用str.capitalize()将每个单词大写,并使用str.join()连接大写的单词。如果可选的第二个参数sep不存在或为None,则空白字符的运行将被单个空格替换,并且前导和尾部的空白将被删除,否则sep用于分隔和连接单词。

另一个解决方案是:

" ".join(map(lambda d: d.capitalize(), word.split(' ')))

大写的单词…

str = "this is string example....  wow!!!";
print "str.title() : ", str.title();

@Gary02127评论,下面的解决方案适用于带有撇号的标题

import re

def titlecase(s):
    return re.sub(r"[A-Za-z]+('[A-Za-z]+)?", lambda mo: mo.group(0)[0].upper() + mo.group(0)[1:].lower(), s)

text = "He's an engineer, isn't he? SnippetBucket.com "
print(titlecase(text))

复制粘贴版本的@jibberia回答:

def capitalize(line):
    return ' '.join(s[:1].upper() + s[1:] for s in line.split(' '))

.title()方法不会在所有测试用例中工作,因此将.capitalize(), .replace()和.split()一起使用是将每个单词的第一个字母大写的最佳选择。

def caps(y):

     k=y.split()
     for i in k:
        y=y.replace(i,i.capitalize())
     return y