如何在 Python 中将字符串转换为标题格?

例如:

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

是否存在执行此任务的库或标准方法?

187932 次浏览

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

def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
def capitalizeWords(s):
return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s)

re.sub可以使用一个函数作为“替换”(而不仅仅是一个字符串,这是大多数人似乎都熟悉的用法)。对于模式的每次匹配,都将使用一个 re.Match对象调用 repl 函数,并且结果(应该是一个字符串)将用作该匹配的替换。

一个更长的版本:

WORD_RE = re.compile(r'\w+')


def capitalizeMatch(m):
return m.group(0).capitalize()


def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)

这将预编译模式(通常认为是良好的形式) ,并使用命名函数而不是 lambda。

为什么不使用 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'

这一个总是以小写字母开头,并且去掉非字母数字字符:

def camelCase(st):
output = ''.join(x for x in st.title() if x.isalnum())
return output[0].lower() + output[1:]

只要使用. 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 时好运!

潜在库: https://pypi.org/project/stringcase/

例如:

import stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"

虽然它是否会留下空间是值得怀疑的。(示例显示它删除了空格,但是存在一个 bug 跟踪器问题,指出它留下了空格。)

我想在这篇文章中加上我的一点贡献:

def to_camelcase(str):
return ' '.join([t.title() for t in str.split()])
def camelCase(st):
s = st.title()
d = "".join(s.split())
d = d.replace(d[0],d[0].lower())
return d

来自代码大战-编写简单的代码。用于字符串的 Python 中的 camelCase 方法。所有单词的第一个字母必须大写,不能有空格。 Camelcase (“ hello case”) = > HelloCase 骆驼大小写(“骆驼大小写”) = > 骆驼大小写(CamelCaseWord)

def camel_case(string):
titled_string = string.title()
space_joined_string = titled_string.replace(' ', '')
return space_joined_string