Python标题大小写,但保留已有的大写字母
我在寻找一种非常“Python风格”的方法(Python 3.x)来完成以下操作,但还没有找到合适的办法。如果我有以下这个字符串:
string = 'this is a test string'
我可以用下面的代码把它转换成标题格式:
string.title()
这样得到的结果是:
'This Is A Test String'
但是,如果我有以下这个字符串:
string = 'Born in the USA'
应用标题格式后得到的结果是:
string = 'Born In The Usa'
应该得到:
'Born In The USA'
我想找到一种方法来进行标题格式转换,但不改变已经是大写的文本。有办法做到这一点吗?
6 个回答
2
虽然没有现成的方法,但其实模仿起来很简单:
def cap(word):
return word[0].upper() + word[1:]
def title_preserving_caps(string):
return " ".join(map(cap, string.split(' ')))
string = title_preserving_caps('Born in the USA')
2
这是一个简单的例子,不过只用ASCII字符。
In [3]: data = "in UK"
In [4]: titled = data.title()
In [5]: titled
Out[5]: 'In Uk'
In [8]: "".join(map(min, zip(data, titled)))
Out[8]: 'In UK'
2
看起来这就是你想要的:
def smart_title(s):
return ' '.join(w if w.isupper() else w.capitalize() for w in s.split())
你可以像下面这个例子一样使用它:
>>> smart_title('Born in the USA')
'Born In The USA'
4
那这个怎么样:
string = 'born in the USA'
title = "".join([a if a.isupper() else b for a,b in zip(string,string.title())])
print title
显示:
Born In The USA
这个方法效率不是很高,但可以保留原字符串中的大写字母,同时也能让其他单词变成大写。
19
你想要的输出结果不太清楚。
如果你是想因为字符串里有大写字母的单词而忽略整个字符串,首先可以检查一下这个字符串是否全是小写字母:
if string.islower():
string = string.title()
如果你只是想忽略那些已经有大写字母的特定单词,可以把字符串按空格分开,然后只把那些小写的单词变成首字母大写:
string = ' '.join([w.title() if w.islower() else w for w in string.split()])
下面是后面这种方法的示例:
>>> string = 'Born in the USA'
>>> ' '.join([w.title() if w.islower() else w for w in string.split()])
'Born In The USA'