2012-09-13 26 views

Respuesta

164

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

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

Si desea que la funcionalidad, quitarse los dígitos, se puede utilizar para comprobar '2'.isdigit() para cada carácter.

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

Me pregunto cómo capitalizar el primer carácter alfabético – user1442957

+5

y eso es lo que hace esta respuesta, más o menos – njzk2

+12

yo usaría si c.isalpha() en lugar de, si no c. isdigit() – njzk2

0

me ocurrió esto:

import re 

regex = re.compile("[A-Za-z]") # find a alpha 
str = "1st str" 
s = regex.search(str).group() # find the first alpha 
str = str.replace(s, s.upper(), 1) # replace only 1 instance 
print str 
+0

no funcionan si no hay alfa –

174

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 solo capitaliza el primer alfabeto c personaje. Pero luego .capitalize() tiene el mismo problema, al menos en ese 'joe Bob'.capitalize() == 'Joe bob', entonces meh.

9

Aquí es decir una línea que va a mayúsculas la primera letra y dejar el caso de todas las letras siguientes:

import re 

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

Esto dará lugar a WordsWithOtherUppercaseLetters

29

Esto es similar a @ respuesta de Anon en ese mantiene intacto el resto de la caja de la cuerda, sin la necesidad del módulo re.

def upperfirst(x): 
    return x[0].upper() + x[1:] 

x = 'thisIsCamelCase' 

y = upperfirst(x) 

print(y) 

# Result: 'ThisIsCamelCase' # 

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

+2

Muy útil, pero necesita una 'len (x) == 0' rama. – Xan

+0

desde python 2.5 la caja vacía todavía puede manejarse en una línea: 'return x [0] .upper() + x [1:] si len (x)> 0 else x' – danio

+0

Respuesta muy útil, porque' capitalize '&' title' primero minúscula toda la cadena y luego mayúscula solo la primera letra. –

0

Puede reemplazar el primera letra (preceded by a digit) de cada palabra usando expresiones regulares:

re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy') 

output: 
1Bob 5Sandy 
0

como ver here respondida por Chen Houwu, es posible utilizar el paquete de cadena:

import string 
string.capwords("they're bill's friends from the UK") 
>>>"They're Bill's Friends From The Uk" 
0

una sola línea: ' '.join(token_text[:1].upper() + token_text[1:] for sub in text.split(' '))

Cuestiones relacionadas