python函数仅首字母大写

python function capitalize first letter only

本问题已经有最佳答案,请猛点这里访问。

我只需要构建一个函数来从任何单词转换第一个字符,但是如果单词的第一个字符不是以字符开头,例如"-sun"、"-tree"、"2cat",这个函数也需要解决这个问题。这些单词需要类似于"-sun、-tree、2cat"。这是我到目前为止所拥有的,它可以转换任何单词,但我不知道第二部分,需要如何使用ASCII?获取第一个字符的值,看看这个词是否以字符开头?

1
2
3
4
5
6
7
def convert(capital):
    return capital[0].upper() + capital[1:]

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

main()

不管怎样,您的函数都将第一个字符大写。

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

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

另一种方法是使用基于正则表达式的替换;您必须使用函数将找到的字符大写:

1
2
3
4
5
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(),它对文本中的所有单词都是相同的,但只适用于第一个单词:

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


一种选择是使用regex并将其限制为1个替换,例如:

1
2
3
4
5
>>> 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'


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

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