Python capitaliza solo la primera letra

Resuelto user1442957 asked hace 12 años • 10 respuestas

Soy consciente de que .capitalize() pone en mayúscula la primera letra de una cadena, pero ¿qué pasa si el primer carácter es un número entero?

este

1bob
5sandy

a esto

1Bob
5Sandy
user1442957 avatar Sep 13 '12 22:09 user1442957
Aceptado

Sólo porque nadie más lo ha mencionado:

>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'

Sin embargo, esto también daría

>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'

es decir, no sólo pone en mayúscula el primer carácter alfabético. Pero luego .capitalize()tiene el mismo problema, al menos en eso 'joe Bob'.capitalize() == 'Joe bob', así que meh.

DSM avatar Sep 13 '2012 16:09 DSM

Si el primer carácter es un número entero, no pondrá en mayúscula la primera letra.

>>> '2s'.capitalize()
'2s'

Si desea la funcionalidad, elimine los dígitos, puede usarlos '2'.isdigit()para verificar cada carácter.

>>> s = '123sa'
>>> for i, c in enumerate(s):
...     if not c.isdigit():
...         break
... 
>>> s[:i] + s[i:].capitalize()
'123Sa'
Ali Afshar avatar Sep 13 '2012 15:09 Ali Afshar

Esto es similar a la respuesta de @Anon en que mantiene intacto el resto del caso de la cadena, sin la necesidad del módulo 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

Como señaló @Xan, la función podría necesitar más verificación de errores (como verificar que x es una secuencia; sin embargo, estoy omitiendo casos extremos para ilustrar la técnica)

Actualizado por comentario de @normanius (¡gracias!)

¡Gracias a @GeoStoneMarten por señalar que no respondí la pregunta! -arreglado eso

pinkwerks avatar Aug 26 '2015 17:08 pinkwerks