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