2012-09-13 17 views

Antwort

164

Wenn das erste Zeichen eine ganze Zahl ist, wird es die ersten Buchstaben nicht nutzen.

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

Wenn Sie die Funktionalität wollen, sind die Ziffern abzustreifen, können Sie '2'.isdigit() verwenden für jedes Zeichen zu überprüfen.

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

Ich frage, wie die erste Alpha-Charakter – user1442957

+5

zu nutzen und das ist, was diese Antwort der Fall ist, so ziemlich – njzk2

+12

ich, wenn c.isalpha() statt, wenn nicht c verwenden würde. isdigit() – njzk2

0

kam ich mit auf den Punkt:

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

funktioniert nicht, wenn kein Alpha vorhanden ist –

174

Nur weil sonst niemand erwähnt hat:

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

Dies ist jedoch auch

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

dh geben würde, es macht nicht nur die ersten Buchstaben zunutze c Zeichen. Aber dann .capitalize() hat das gleiche Problem, zumindest in diesem 'joe Bob'.capitalize() == 'Joe bob', so meh. Hier

9

ist ein One-Liner, der den ersten Buchstaben groß geschrieben werden und bei allen nachfolgenden Buchstaben lassen:

import re 

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

Dies führt in WordsWithOtherUppercaseLetters

29

Dies ist ähnlich @ Anon Antwort, dass Es behält den Rest des String-Falls intakt, ohne dass das re-Modul benötigt wird.

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

x = 'thisIsCamelCase' 

y = upperfirst(x) 

print(y) 

# Result: 'ThisIsCamelCase' # 

Wie @Xan wies darauf hin, könnte die Funktion mehr Fehler verwenden Überprüfung (wie, dass x Überprüfung ist eine Folge - aber ich Rand Fällen bin Weglassen der Technik zu veranschaulichen)

+2

Sehr nützlich, aber benötigt a 'len (x) == 0' Verzweigung. – Xan

+0

seit Python 2.5 kann der leere Fall noch in einer Zeile behandelt werden: 'return x [0] .upper() + x [1:] if len (x)> 0 else x' – danio

+0

Sehr nützliche Antwort, weil' groß geschrieben '&' title' Kleinbuchstaben zuerst den ganzen String und dann Großbuchstaben nur den ersten Buchstaben. –

0

Sie ersetzen die Anfangsbuchstaben (preceded by a digit) jedes Wort regex:

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

output: 
1Bob 5Sandy 
0

Als here von Chen Houwu beantwortet zu sehen, dann ist es möglich, String-Paket zu verwenden:

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

ein Einzeiler: ' '.join(token_text[:1].upper() + token_text[1:] for sub in text.split(' '))