8 ответов:
Если первый символ является целым числом, он не прописной первую букву.
>>> '2s'.capitalize() '2s'Если вы хотите функциональность, снимите цифры, вы можете использовать
'2'.isdigit()для проверки каждого символа.>>> s = '123sa' >>> for i, c in enumerate(s): ... if not c.isdigit(): ... break ... >>> s[:i] + s[i:].capitalize() '123Sa'
только потому, что никто больше не упоминал об этом:
>>> 'bob'.title() 'Bob' >>> 'sandy'.title() 'Sandy' >>> '1bob'.title() '1Bob' >>> '1sandy'.title() '1Sandy'однако, это также даст
>>> '1bob sandy'.title() '1Bob Sandy' >>> '1JoeBob'.title() '1Joebob'т. е. это не просто написать с большой буквы. Но тогда
.capitalize()имеет ту же проблему, по крайней мере, в этом'joe Bob'.capitalize() == 'Joe bob', Так что мех.
это похоже на ответ @Anon в том, что он сохраняет остальную часть корпуса строки неповрежденной, без необходимости в модуле 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Как указал @Xan, функция может использовать дополнительную проверку ошибок (например, проверку того, что x является последовательностью - однако я опускаю крайние случаи, чтобы проиллюстрировать технику)
Обновлено в комментарии @ normanius (спасибо!)
спасибо @GeoStoneMarten, указав, что я не ответил на вопрос! - исправлено это
вот одна строчка, которая будет заглавной первой буквы и оставить случай всех последующих букв:
import re key = 'wordsWithOtherUppercaseLetters' key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1) print keyв результате
WordsWithOtherUppercaseLetters
Как видим здесь ответил Чэнь Хоуву, можно использовать пакет строк:
import string string.capwords("they're bill's friends from the UK") >>>"They're Bill's Friends From The Uk"
Я придумал это:
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
Вы можете заменить первую букву (
preceded by a digit) каждого слова, используя регулярное выражение:re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy') output: 1Bob 5Sandy
Comments