用exception来表示一个string

在Python中是否有标准的方法来标识一个string(也就是说,单词以大写字母开头,所有剩余的封装字符都是小写字母),但是留下像小写字母of小写字母和小写字母的文章?

这有几个问题。 如果您使用拆分和连接,一些空格字符将被忽略。 内置的大写和标题方法不会忽略空格。

 >>> 'There is a way'.title() 'There Is A Way' 

如果一个句子从一篇文章开始,你不希望小写的第一个单词是小写。

牢记这些:

 import re def title_except(s, exceptions): word_list = re.split(' ', s) # re.split behaves as expected final = [word_list[0].capitalize()] for word in word_list[1:]: final.append(word if word in exceptions else word.capitalize()) return " ".join(final) articles = ['a', 'an', 'of', 'the', 'is'] print title_except('there is a way', articles) # There is a Way print title_except('a whim of an elephant', articles) # A Whim of an Elephant 

使用titlecase.py模块! 仅适用于英语。

 >>> from titlecase import titlecase >>> titlecase('i am a foobar bazbar') 'I Am a Foobar Bazbar' 

有这些方法:

 >>> mytext = u'i am a foobar bazbar' >>> print mytext.capitalize() I am a foobar bazbar >>> print mytext.title() I Am A Foobar Bazbar 

没有小写的文章选项。 您必须自己编写代码,可能需要使用要降低的文章列表。

Stuart Colville创build了 一个由John Gruber编写的用于将string转换为标题大小写的Perl脚本 的Python端口 ,但是避免了基于“纽约时报手册”风格的规则大写小写字母,以及迎合一些特殊情况。

这些脚本的一些聪明之处:

  • 他们利用小写字母,如if,in,of等等,但是如果在input中错误地使用大写字母,将会失去大写。

  • 脚本假定大写字母不是第一个字符的单词已经被正确地大写。 这意味着他们只会留下一个像“iTunes”这样的词,而不是把它改成“iTunes”或者更糟糕的“Itunes”。

  • 他们跳过任何与点线的单词; “example.com”和“del.icio.us”将保持小写。

  • 他们专门用来处理奇怪的事件,比如“AT&T”和“Q&A”,它们都包含通常应该是小写字母的小字(at和a)。

  • 标题的第一个也是最后一个词总是被大写,所以诸如“无所畏惧”的input将变成“无所畏惧”。

  • 冒号后面的小字将会大写。

你可以在这里下载。

 capitalize (word) 

这应该做的。 我有不同的看法。

 >>> mytext = u'i am a foobar bazbar' >>> mytext.capitalize() u'I am a foobar bazbar' >>> 

好吧,如上所述,你必须做一个自定义的大写:

mytext =你是一个foobar bazbar'

 def xcaptilize(word): skipList = ['a', 'an', 'the', 'am'] if word not in skipList: return word.capitalize() return word k = mytext.split(" ") l = map(xcaptilize, k) print " ".join(l) 

这输出

 I am a Foobar Bazbar 

Python 2.7的标题方法有一个缺陷。

 value.title() 

当价值是木匠的助手时,将返回木匠助手

最好的解决scheme可能是@BioGeek使用Stuart Colville的titlecase。 这与@ Etienne提出的解决scheme是一样的。

  not_these = ['a','the', 'of'] thestring = 'the secret of a disappointed programmer' print ' '.join(word if word in not_these else word.title() for word in thestring.capitalize().split(' ')) """Output: The Secret of a Disappointed Programmer """ 

标题以大写字母开头,与文章不符。

单引号使用列表理解和三元运算符

 reslt = " ".join([word.title() if word not in "the a on in of an" else word for word in "Wow, a python one liner for titles".split(" ")]) print(reslt) 

分解:

for word in "Wow, a python one liner for titles".split(" ")将string拆分成列表并启动for循环(在列表综合中)

word.title() if word not in "the a on in of an" else word使用本地方法title()标题大小写string,如果它不是一个文章

" ".joinjoin列表元素(空格)