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() |
不管怎样,您的函数都将第一个字符大写。
对于这个任务,您必须以不同的方式找到第一个字符;您可以使用
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) |
这将不敏感地匹配第一个字母上的大小写,并将其替换为大写版本。
第三种想法是使用
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()) |