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
python
capitalize
letter
usuario1442957
fuente
fuente
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:
Sin embargo, esto también daría
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.fuente
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.
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
fuente
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á dellen(X)==0
caso de la esquina.Aquí hay una línea que pondrá en mayúscula la primera letra y dejará el caso de todas las letras siguientes:
Esto resultará en
WordsWithOtherUppercaseLetters
fuente
Como vemos aquí respondido por Chen Houwu, es posible usar el paquete de cadena:
fuente
Se me ocurrió esto:
fuente
Puede reemplazar la primera letra (
preceded by a digit
) de cada palabra usando regex:fuente
una línea:
' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))
fuente