2016-03-25 4 views
2

Мне нравятся некоторые способы, как string.capwords() ведет себя, и некоторые способы, как .title() ведет себя, но не один.Строчная буква после определенного символа?

мне нужно аббревиатура прописных букв, которые .title() делают, но не string.capwords() и string.capwords() не капитализировать буквы после одинарных кавычек, так что мне нужно сочетание два. Я хочу использовать .title(),, а затем мне нужно ввести строчную букву после апострофа, только если между пробелами нет пробелов.

Например, вот профиль ввода:

string="it's e.t.!" 

И я хочу, чтобы преобразовать его в:

>>> "It's E.T.!" 

.title() будет заглавной 'S', и string.capwords() не капитализировать «и др ».

+0

Попробуйте использовать регулярные выражения в этом случае может быть более простым – woozyking

ответ

6

Вы можете использовать регулярное выражение замены (см re.sub):

>>> s = "it's e.t.!" 
>>> import re 
>>> re.sub(r"\b(?<!')[a-z]", lambda m: m.group().upper(), s) 
"It's E.T.!" 

[a-z] будет соответствовать строчную букву алфавита. Но не после ' ((?<!') - отрицательное утверждение позади). И письмо должно появиться после границы слова; поэтому t не будет соответствовать.

Второй аргумент re.sub, lambda будет возвращать строку подстановки. (верхняя версия письма), и он будет использоваться для замены.

+0

Argh вы получили там первый, хороший! – Bahrom

+0

Спасибо! Работает так, как ожидалось! –

+0

@TrivisionZero, я не понимаю. Не могли бы вы привести примерную строку? – falsetru

1
a = ".".join([word.capitalize() for word in "it's e.t.!".split(".")]) 
b = " ".join([word.capitalize() for word in a.split(" ")]) 
print(b) 

Отредактировано для использования функции capize. Теперь он начинает выглядеть как-то полезным :). Но это решение не работает с другими символами пробела. Для этого я бы пошел с решением фальсетру.

+0

Попробуйте использовать 'it's e.t.!', А не строку, уже заглавную. – falsetru

+0

кричит. Позвольте мне исправить это. –

+0

Что делать, если '' 'появляется между словами? – falsetru

0

, если вы не хотите использовать регулярное выражение, вы всегда можете использовать этот простой цикл

s = "it's e.t.!" 
capital_s = '' 
pos_quote = s.index("'") 
for pos, alpha in enumerate(s): 
    if pos not in [pos_quote-1, pos_quote+1]: 
     alpha = alpha.upper() 
    capital_s += alpha 
print capital_s 

надеюсь, что это помогает :)

Смежные вопросы