如何将字符串中每个单词的首字母大写(Python)?s = 'the brown fox'......在这里做点什么......s 应该 :'The Brown Fox'最简单的方法是什么?
3 回答

GCT1015
TA贡献1827条经验 获得超4个赞
.title()
字符串的方法(ASCII或Unicode很好)这样做:
>>> "hello world".title()'Hello World'>>> u"hello world".title()u'Hello World'
但是,请注意带有嵌入式撇号的字符串,如文档中所述。
该算法使用简单的与语言无关的单词定义作为连续字母组。该定义在许多情况下起作用,但它意味着收缩和占有的撇号形成单词边界,这可能不是所希望的结果:
>>> "they're bill's friends from the UK".title()"They'Re Bill'S Friends From The Uk"

蝴蝶不菲
TA贡献1810条经验 获得超4个赞
仅仅因为这种事情对我来说很有趣,这里还有两个解决方案。
分成单词,从分组中初始化每个单词,然后重新加入。这将改变将单词分隔成单个空白区域的空白区域,无论它是什么。
s = 'the brown fox'lst = [word[0].upper() + word[1:] for word in s.split()]s = " ".join(lst)
编辑:当我编写上面的代码时,我不记得我在想什么,但是没有必要建立一个明确的列表; 我们可以使用生成器表达式以懒惰的方式执行它。所以这是一个更好的解决方案:
s = 'the brown fox's = ' '.join(word[0].upper() + word[1:] for word in s.split())
使用正则表达式匹配字符串的开头,或分隔单词的空格,以及单个非空白字符; 使用括号标记“匹配组”。编写一个带有匹配对象的函数,并返回未更改的空白匹配组和以大写字母表示的非空白字符匹配组。然后re.sub()
用来替换图案。这个没有第一个解决方案的标点符号问题,也不像我的第一个解决方案那样重做白色空间。这个产生最好的结果。
import re s = 'the brown fox'def repl_func(m): """process regular expression match groups for word upper-casing problem""" return m.group(1) + m.group(2).upper()s = re.sub("(^|\s)(\S)", repl_func, s)>>> re.sub("(^|\s)(\S)", repl_func, s)"They're Bill's Friends From The UK"
我很高兴我研究了这个答案。我不知道re.sub()
可以采取功能!您可以在内部re.sub()
进行非平凡处理以产生最终结果!
添加回答
举报
0/150
提交
取消