python函数仅首字母大写

时间:2015-02-02 15:27:12

标签: python python-3.x uppercase capitalize

我需要构建一个函数来仅转换第一个字符,来自任何单词,但是如果单词中的第一个字符不是以字符开头,则此函数需要解决问题,例如' _sun&# 39;,' -tree',' 2cat'这些话需要像_Sun,-Tree,2Cat。这是我到目前为止,它可以转换任何单词,但我不知道如何做第二部分,需要使用ASCII?获取第一个字符的值并查看该单词是否以字符开头?

def convert(capital):
    return capital[0].upper() + capital[1:]

def main():
   print(convert('sun'))

main()

3 个答案:

答案 0 :(得分:3)

无论如何,您的函数会将第一个字符大写。

对于此任务,您必须以不同的方式找到第一个字符;你可以使用str.isalpha() function

def convert(capital):
    index = 0
    while index < len(capital) and not capital[index].isalpha():
        index += 1
    return capital[:index] + capital[index:].capitalize()

另一种方法是使用regular expression-based substitution;你必须使用一个函数来大写找到的字符:

import re

def convert(capital):
    return re.sub(r'([a-z])(.*)$', lambda m: m.group(1).upper() + m.group(2),
                  capital, flags=re.I)

这在第一个字母上不区分大小写,并用大写版本替换它。

第三个想法是使用str.title(),它对文本中的所有单词执行相同操作,但仅将其应用于第一个单词:

def convert(capital):
    first, _, rest = capital.partition(' ')
    return '{} {}'.format(first.title(), rest)

答案 1 :(得分:2)

一种选择是使用正则表达式并将其限制为1次替换,例如:

>>> import re
>>> re.sub('[a-zA-Z]', lambda m: m.group().upper(), '2cat', 1)
'2Cat'
>>> re.sub('[a-zA-Z]', lambda m: m.group().upper(), 'sun', 1)
'Sun'

答案 2 :(得分:0)

你似乎只有一个单词以字母开头或第二个字符是一个字母,所以你只有两种可能性:

print(s.capitalize() if s[0].isalpha() else s[0] +  s[1:].capitalize())