s = 'the brown fox'
...在这里做某事...
s
应该是:
'The Brown Fox'
最简单的方法是什么?
#1楼
@jibberia anwser的复制粘贴就绪版本:
def capitalize(line):
return ' '.join(s[:1].upper() + s[1:] for s in line.split(' '))
#2楼
.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"
使用str.split()将参数分解为单词,使用str.capitalize()将每个单词大写,然后使用str.join()将大写的单词连接起来。 如果不存在可选的第二个参数sep或“无”,则将空白字符替换为一个空格,并删除前导和尾随空白,否则使用sep分隔和合并单词。
#3楼
字符串的.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"
#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())
使用正则表达式匹配字符串的开头,或使用空格分隔单词,再加上一个非空格字符; 用括号标记“匹配组”。 编写一个函数,该函数接受一个match对象,并以大写形式返回空白的空白匹配组和非空白的字符匹配组。 然后使用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()
进行非平凡的处理以产生最终结果!
#5楼
如果str.title()对您不起作用,请自己大写。
- 将字符串分成单词列表
- 每个单词的首字母大写
- 将单词连接成一个字符串
单线:
>>> ' '.join([s[0].upper() + s[1:] for s in "they're bill's friends from the UK".split(' ')])
"They're Bill's Friends From The UK"
清晰的例子:
input = "they're bill's friends from the UK"
words = input.split(' ')
capitalized_words = []
for word in words:
title_case_word = word[0].upper() + word[1:]
capitalized_words.append(title_case_word)
output = ' '.join(capitalized_words)
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3156411