如何将字符串中每个单词的首字母大写?

 2020-01-11 00:36

遇到的问题:

 s = 'the brown fox' 

...在这里做某事...

s应该是:

 'The Brown Fox' 

最简单的方法是什么?

解决方案:

解决方案一

字符串的.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" 

解决方案二

.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" 

capwordspython文档中

使用str.split()将参数分解为单词,使用str.capitalize()将每个单词大写,然后使用str.join()将大写的单词连接起来。 如果不存在可选的第二个参数sep或“无”,则将空白字符替换为一个空格,并删除前导和尾随空白,否则使用sep分隔和合并单词。

解决方案三

仅仅因为这种事情对我来说很有趣,所以这里有另外两个解决方案。

拆分为单词,对拆分组中的每个单词进行大写,然后重新加入。 不管是什么,这都会将将单词分隔的空白变为单个空白。

 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()进行非平凡的处理以产生最终结果!

阅读 445 次发布于 2020年01月11日
推荐阅读
为什么处理排序数组要比处理未排序数组快?

这是一段C ++代码,显示了一些非常特殊的行为。 出于某些奇怪的原因,奇迹般地对数据进行排序使代码快了将近六倍: #include #include #include int main() { // Generate data const unsigned arraySize = 32768; int da...

2019-12-20 阅读 18

如何撤消Git中的最新本地提交?

我不小心将错误的文件提交给Git ,但是我还没有将提交推送到服务器。 如何撤消本地存储库中的那些提交?

2019-12-20 阅读 31

如何在本地和远程删除Git分支?

我想在本地和远程删除分支。 尝试删除远程分支失败 $ git branch -d remotes/origin/bugfix error: branch 'remotes/origin/bugfix' not found. $ git branch -d origin/bugfix error: branch 'origin/bugfix' not found. $ git branch ...

2019-12-20 阅读 21

'git pull'和'git fetch'有什么区别?

主持人注意:鉴于此问题已经发布了67个答案 (其中一些已删除),请在发布另一个问题之前考虑您是否正在贡献新内容 。 git pull和git fetch什么区别?

2019-12-20 阅读 23

什么是正确的JSON内容类型?

我一直在弄乱JSON一段时间,只是将其作为文本推出,并没有伤害任何人(据我所知),但是我想正确地做事。 我已经看到许多所谓的JSON内容类型的“标准”: application/json application/x-javascript text/javascript text/x-javascript text/x-json 但是哪一个是正确的,还是最好的? 我发现在它们之间存在安全性和浏览...

2019-12-20 阅读 30

目录