Sé que .capitalize () escribe en mayúscula la primera letra de una cadena, pero ¿qué pasa si el primer carácter es un entero?
esta
1bob
5sandy
a esto
1Bob
5Sandy
Sé que .capitalize () escribe en mayúscula la primera letra de una cadena, pero ¿qué pasa si el primer carácter es un entero?
esta
1bob
5sandy
a esto
1Bob
5Sandy
Respuestas:
Si el primer carácter es un entero, no capitalizará la primera letra.
>>> '2s'.capitalize()
'2s'
Si desea la funcionalidad, elimine los dígitos, puede usar '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'
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
resuelve para el caso de la cadena vacía
. capitalize
También transformará otros caracteres para bajar. De los documentos oficiales: "Devuelve una versión de S con título, es decir, las palabras comienzan con caracteres de título, todos los caracteres restantes tienen minúscula " .
Solo 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 solo capitaliza 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.
Esto es similar a la respuesta de @ Anon en que mantiene el resto de la caja de la cadena intacta, 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 usar 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. -corregido eso
len(x) == 0
rama.
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
primero en minúscula toda la cadena y luego en mayúscula solo la primera letra.
a[:1].upper() + a[1:]
, esto se encargará del len(X)==0
caso de la esquina.
una línea: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))