【问题标题】:python function capitalize first letter only [duplicate]python函数仅将第一个字母大写[重复]
【发布时间】:2015-04-01 14:15:12
【问题描述】:

我需要构建一个函数来仅从任何单词转换第一个字符,但如果单词中的第一个字符不以字符开头,例如'_sun','-tree',此函数还需要解决问题, '2cat' 这些词需要像 _Sun, -Tree, 2Cat。这是我目前所拥有的,它可以转换任何单词,但我不知道第二部分如何,需要使用 ASCII 吗?获取第一个字符的值并查看单词是否以字符开头?

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

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

main()

【问题讨论】:

    标签: python python-3.x uppercase capitalize


    【解决方案1】:

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

    对于这个任务,你必须以不同的方式找到第一个字符;你可以使用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)
    

    【讨论】:

    • 太糟糕了str.title 不接受“要大写的单词数”的参数。在这里会很完美:-)
    • @mgilson:你仍然可以使用它,但你必须在第一个空格上拆分。已添加。
    【解决方案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'
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 虽然这是相当有限的;我相信 OP 会回来询问'_-sun'呢?
      • @MartijnPieters,我需要构建一个函数来仅从任何单词转换第一个字符,但如果单词中的第一个字符不以字符开头,此函数还需要解决问题 ,这就是代码的作用。
      • 当然,它解决了这个问题。但它很少这么简单。
      • @MartijnPieters,我将把它留给 OP 来决定。
      猜你喜欢
      • 2018-04-03
      • 2017-03-20
      • 1970-01-01
      • 2023-04-04
      • 2019-09-04
      • 2021-03-29
      • 2016-10-20
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多