python仅限首字母大写

use*_*957 163 python letter capitalize

我知道.capitalize()将字符串的第一个字母大写,但如果第一个字符是整数呢?

这个

1bob
5sandy
Run Code Online (Sandbox Code Playgroud)

对此

1Bob
5Sandy
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 225

只是因为没有其他人提到它:

>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Run Code Online (Sandbox Code Playgroud)

但是,这也会给出

>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
Run Code Online (Sandbox Code Playgroud)

即它不仅仅是将第一个字母字符大写.但是那时.capitalize()也有同样的问题,至少在那个问题上'joe Bob'.capitalize() == 'Joe bob',所以.


Ali*_*har 214

如果第一个字符是整数,则不会将第一个字母大写.

>>> '2s'.capitalize()
'2s'
Run Code Online (Sandbox Code Playgroud)

如果您需要该功能,请删除数字,您可以使用它'2'.isdigit()来检查每个字符.

>>> s = '123sa'
>>> for i, c in enumerate(s):
...     if not c.isdigit():
...         break
... 
>>> s[:i] + s[i:].capitalize()
'123Sa'
Run Code Online (Sandbox Code Playgroud)

  • 如果c.isalpha()而不是c.isdigit(),我会使用 (15认同)
  • 这就是答案所做的,非常多 (5认同)
  • 这个答案是不正确的.`."大写"也会将其他角色转变为低级.从官方文档:"返回一个标题版本的S,即单词以标题字符开头,**所有剩余的套装字符都有小写字母.**" (4认同)
  • @ Jan-PhilipGehrcke:在这种情况下,`next((i代表i,e代表枚举(测试),如果不是e.isdigit()),'0')`为空字符串案例解决它 (2认同)

pin*_*rks 37

这类似于@ Anon的答案,因为它保持了字符串的其余部分完整,而不需要re模块.

def sliceindex(x):
    i = 0
    for c in x:
        if c.isalpha():
            i = i + 1
            return i
        i = i + 1

def upperfirst(x):
    i = sliceindex(x)
    return x[:i].upper() + x[i:]

x = '0thisIsCamelCase'

y = upperfirst(x)

print(y)
# 0ThisIsCamelCase
Run Code Online (Sandbox Code Playgroud)

正如@Xan指出的那样,该函数可以使用更多的错误检查(例如检查x是一个序列 - 但是我省略边缘情况来说明该技术)

根据@normanius评论更新(谢谢!)

感谢@GeoStoneMarten指出我没有回答这个问题! - 固定的

  • 有用.只需使用`a [:1] .upper()+ a [1:]`,这将处理`len(X)== 0`角点情况. (3认同)
  • 非常有用,但需要一个`len(x)== 0`分支. (2认同)

小智 12

这是一个单行代码,它将大写第一个字母并留下所有后续字母的大小写:

import re

key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key
Run Code Online (Sandbox Code Playgroud)

这将导致 WordsWithOtherUppercaseLetters


Fáb*_*bio 9

正如陈厚武在这里回答的那样,可以使用字符串包:

import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"
Run Code Online (Sandbox Code Playgroud)

  • 如何将第一个单词的第一个字母大写? (2认同)

Gür*_*bek 7

一行:' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))