如何在Python中将字符串转换为Title Case?

问题描述 投票:61回答:8

例:

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

是否有库或标准方法来执行此任务?

python
8个回答
154
投票

为什么不从文档中使用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'

16
投票

这个总是以小写字母开头,并且还会删除非字母数字字符:

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

9
投票
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。


5
投票

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

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

4
投票

注意:为什么我提供另一个答案?这个答案基于问题的标题和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祝你好运!


1
投票

潜在的图书馆:https://pypi.org/project/stringcase/

例:

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

虽然它是否会留下空格是值得怀疑的。(例子显示它会删除空间,但是有一个错误跟踪器问题,指出它会让它们进入。)


1
投票

我想在这篇文章中加入我的小贡献:

def to_camelcase(str):
  return ' '.join([t.title() for t in str.split()])

0
投票

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

>>> a='mohs shahid ss'
>>> a.title()
'Mohs Shahid Ss'
>>> a='TRUE'
>>> b=a.title()
>>> b
'True'
>>> eval(b)
True
© www.soinside.com 2019 - 2024. All rights reserved.