CamelCase每个string,任何标准库?

例:

HILO -> Hilo new york -> New York SAN FRANCISCO -> San Francisco 

有没有图书馆或标准的方式来执行此任务?

为什么不使用title正确的文档:

 >>> "they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk" 

如果你真的想CamelCase你可以使用这个:

 >>> ''.join(x for x in 'make IT camel CaSe'.title() if not x.isspace()) 'MakeItCamelCase' 

这一个总是以小写字母开头,也是非字母数字字符:

 def camelCase(st): output = ''.join(x for x in st.title() if x.isalpha()) return output[0].lower() + output[1:] 
 def capitalizeWords(s): return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s) 

re.sub可以为“replace”(而不只是一个string,这是大多数人似乎熟悉的用法)的函数。 这个repl函数将被一个re.Match对象调用,用于模式的每个匹配,并且结果(应该是一个string)将被用来替代那个匹配。

同样的东西的更长的版本:

 WORD_RE = re.compile(r'\w+') def capitalizeMatch(m): return m.group(0).capitalize() def capitalizeWords(s): return WORD_RE.sub(capitalizeMatch, s) 

这个预编译模式(通常被认为是好的forms),并使用一个命名函数,而不是一个lambda。

为什么不写一个? 像这样的东西可以满足你的要求:

 def FixCase(st): return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split()) 

注意:为什么我要提供另一个答案? 这个答案是以问题的标题为基础的,而camelcase的定义是这样一个概念:一系列被连接在一起的单词(没有空格),这样每个原始单词都以大写字母开头(其余的都是小写字母)除了该系列的第一个字(完全小写)外。 另外假定“所有string”是指ASCII字符集; unicode不能使用这个解决scheme)。

简单

鉴于上面的定义,这个函数

 import re word_regex_pattern = re.compile("[^A-Za-z]+") def camel(chars): words = word_regex_pattern.split(chars) return "".join(w.lower() if i is 0 else w.title() for i, w in enumerate(words)) 

当被调用时,会导致这种情况

 camel("San Francisco") # sanFrancisco camel("SAN-FRANCISCO") # sanFrancisco camel("san_francisco") # sanFrancisco 

不那么简单

请注意,它与一个已经骆驼套装string提交失败!

 camel("sanFrancisco") # sanfrancisco <-- noted limitation 

甚至不那么简单

请注意,它失败了许多Unicodestring

 camel("México City") # mXicoCity <-- can't handle unicode 

我没有解决这些案例(或其他可以引入一些创造力的案例)。 所以,就像所有与弦一样的东西,用unicode来掩盖自己的边缘情况,祝你好运!

只需使用.title(),它会将大写的每个单词的第一个字母转换成小写:

 >>> a='mohs shahid ss' >>> a.title() 'Mohs Shahid Ss' >>> a='TRUE' >>> b=a.title() >>> b 'True' >>> eval(b) True