【问题标题】:Capitalizing hyphenated name大写连字符名称
【发布时间】:2017-01-13 01:01:32
【问题描述】:

我的脚本如下所示:

firstn = input('Please enter your first name: ') 
lastn = input('Please enter Your last name: ') 
print('Good day, ' + str.capitalize(firstn) + ' ' + str.capitalize(lastn)+ '!')

它可以很好地使用简单的名称,如 jack black 或 morgan meeman,但是当我输入像 jordan-bellfort image 这样的连字符名称时,我会期望 "Jordan-Bellfort Image" 但我会收到 "Jordan-bellfort Image"

如何让 python 将连字符后的字符大写?

【问题讨论】:

    标签: python capitalize


    【解决方案1】:

    你可以使用title():

    print('Good day,', firstn.title(), lastn.title(), '!')
    

    控制台示例:

    >>> 'jordan-bellfort image'.title()
    'Jordan-Bellfort Image'
    

    【讨论】:

    • @Kasramvd 不错。
    • 如文档所述:title 使用与语言无关的简单单词定义作为连续字母组。所以它把“jordan-bellfort”算作两个词:“jordan”和“bellfort”。阅读文档;)
    【解决方案2】:

    改用string.capwords()

    使用 str.split() 将参数拆分为单词,每个单词大写 使用 str.capitalize(),并使用 str.join()

    import string
    string.capwords(firstn, "-")
    

    【讨论】:

      【解决方案3】:

      我建议只使用str.title,这是一个比较您的版本和使用 str.title 方法的版本的工作示例:

      import string
      
      tests = [
          ["jack", "black"],
          ["morgan", "meeman"],
          ["jordan-bellfort", "image"]
      ]
      
      for t in tests:
          firstn, lastn = t
          print('Good day, ' + str.capitalize(firstn) +
                ' ' + str.capitalize(lastn) + '!')
          print('Good day, ' + firstn.title() + ' ' + lastn.title() + '!')
          print('-'*80)
      

      结果如下:

      Good day, Jack Black!
      Good day, Jack Black!
      --------------------------------------------------------------------------------
      Good day, Morgan Meeman!
      Good day, Morgan Meeman!
      --------------------------------------------------------------------------------
      Good day, Jordan-bellfort Image!
      Good day, Jordan-Bellfort Image!
      --------------------------------------------------------------------------------
      

      【讨论】:

        【解决方案4】:

        这是一个真正的问题!使用.title() 等似乎很容易解决,但这些建议并不能解决处理任何人名的实际问题。如McCormackO'Briende Araugo

        幸运的是,这个问题已经解决了。见nameparser

        >>> from nameparser import HumanName
        >>> name = HumanName('Shirley Maclaine') # Don't change mixed case names
        >>> name.capitalize(force=True)
        >>> str(name)
        'Shirley MacLaine'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-30
          • 2015-12-27
          • 1970-01-01
          • 2015-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多