示例:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
有没有库或标准方法来执行这个任务?
示例:
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"
如果你真的想要 PascalCase,可以使用这个:
>>> ''.join(x for x in 'make IT pascal CaSe'.title() if not x.isspace())
'MakeItPascalCase'
title
的文档中已经提到了这个问题:“该算法使用的是语言无关的单词定义,即连续字母组成的单词。这个定义在许多情况下都有效,但这意味着缩写和所有格中的撇号会形成单词边界,这可能不是期望的结果。” 可能的解决方案之一是使用 Laurence 回答中的正则表达式 r"['\w]+"
,这样撇号就不会结束匹配(必要时可以添加其他标点符号)。 - Andrew Clark'make IT camel CaSe'.title().replace(' ', '')
。 - Henry Gomersalldef toCamel(s): ret = ''.join(x for x in s.title() if not x.isspace()) return ret[0].lower() + ret[1:]
用法:
toCamel("WRITE this in camelcase") 'writeThisInCamelcase'
- Ron Kaliantitle()
。深奥。 - Evhz这个会始终小写,并剥离非字母数字字符:
def camelCase(st):
output = ''.join(x for x in st.title() if x.isalnum())
return output[0].lower() + output[1:]
def capitalizeWords(s):
return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s)
re.sub
可以接受一个函数作为“replacement”(而不仅仅是字符串,这是大多数人熟悉的用法)。这个 repl 函数将会对每个匹配到的模式调用一个 re.Match
对象,并且返回值(应该是一个字符串)将被用作替换该匹配项的结果。
同样的内容,稍微详细一些:
WORD_RE = re.compile(r'\w+')
def capitalizeMatch(m):
return m.group(0).capitalize()
def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)
这将预编译模式(通常被认为是良好的形式),并使用命名函数代替lambda表达式。
re.sub
给定一个可调用对象(例如:函数)作为“替换”时,它将匹配对象传递给该可调用对象,并期望得到一个字符串,这实际上是它用作替换的内容。如果您觉得 lambda 表达式令人困惑,那么“更长版本”以更冗长的方式完全执行相同的操作。 - Laurence Gonsalvesimport stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"
虽然有疑问它是否会保留空格。(示例显示它会删除空格,但是有一个错误跟踪器问题指出它会保留空格。)
只需使用 .title(),它将把每个单词的第一个字母转换为大写,其余为小写:
>>> a='mohs shahid ss'
>>> a.title()
'Mohs Shahid Ss'
>>> a='TRUE'
>>> b=a.title()
>>> b
'True'
>>> eval(b)
True
注意:为什么我要提供另一个答案?这个回答基于问题的标题和"camelcase"的定义,即:一系列单词被连接在一起(没有空格!),使得每个原始单词的首字母大写(其余小写),除了系列中的第一个单词(它完全是小写)。同时假设"所有字符串"都指ASCII字符集; Unicode将无法使用此解决方案。
根据上述定义,这个函数
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
请注意,当输入一个已经采用驼峰命名法的字符串时,它将失败!
camel("sanFrancisco") # sanfrancisco <-- noted limitation
请注意,它无法处理许多Unicode字符串。
camel("México City") # mXicoCity <-- can't handle unicode
对于这些情况(或其他可能通过一些创意引入的情况),我没有解决方案。所以,就像所有与字符串有关的事情一样,要考虑自己的边缘情况,并祝你在Unicode方面好运!
def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
def camelCase(st):
s = st.title()
d = "".join(s.split())
d = d.replace(d[0],d[0].lower())
return d
来自 Code Wars - 用 Python 编写简单的 .camelCase 方法,将字符串中的每个单词首字母大写且无空格。 camelcase("hello case") => HelloCase camelcase("camel case word") => CamelCaseWord
def camel_case(string):
titled_string = string.title()
space_joined_string = titled_string.replace(' ', '')
return space_joined_string
def to_camelcase(str):
return ' '.join([t.title() for t in str.split()])