>>> myStr="madam. i'm adam! i also tried c,o,m,m,a"
>>> myStr.title()
"Madam. I'M Adam! I Also Tried C,O,M,M,A"
这当然是不正确的。为什么将撇号视为新词的开头。这是一个问题还是我对 title 的概念做错了?
答案 0 :(得分:5)
因为实现通过查看前一个字符来工作,并且如果它是字母数字,它会使当前字符更小,否则它就是大写字母。也就是说,它相对简单,这就是它的纯python版本:
def title(string):
result = []
prev_letter = ' '
for ch in string:
if not prev_letter.isalpha():
result.append(ch.upper())
else:
result.append(ch.lower())
prev_letter = ch
return "".join(result)
答案 1 :(得分:3)
您可以使用:
string.capwords()
# Capitalize the words in a string, e.g. " aBc dEf " -> "Abc Def".
def capwords(s, sep=None):
"""capwords(s, [sep]) -> string
Split the argument into words using split, capitalize each
word using capitalize, and join the capitalized words using
join. Note that this replaces runs of whitespace characters by
a single space.
"""
return (sep or ' ').join(x.capitalize() for x in s.split(sep))
而且,由于title()
依赖于语言环境,请检查您的语言环境以查看这是否是故意的:
locale.localeconv()
以a为单位返回本地约定的数据库 字典。
title()
返回一个标题的字符串版本:单词开头 大写字符,所有剩余的套接字符都是小写字母。对于8位字符串,此方法取决于区域设置。
答案 2 :(得分:2)
标题方法将字符串中每个单词的第一个字母大写(并使其余的小写)。单词被标识为由非字母字符分隔的字母字符的子字符串,例如数字或空格。这可能会导致一些意外行为。例如,字符串“x1x”将转换为“X1X”而不是“X1x”。
基本上,按预期工作。由于撇号确实是非字母的,因此您可以获得上面概述的“意外行为”。
一些谷歌搜索显示,其他人认为这不是最好的事情,并且已经编写了替代实现。请参阅:http://muffinresearch.co.uk/archives/2008/05/27/titlecasepy-titlecase-in-python/
答案 3 :(得分:2)
这里的问题是“标题案例”是一个非常依赖文化的概念。即使是英语,也有太多的角落案例适合他们。 (另见http://bugs.python.org/issue7008)
如果你想要更好的东西,你需要考虑你想要处理的文本类型(这意味着不正确地做其他文本),并编写自己的函数。