Заглавная буква после восклицательного знака

У меня есть строка, которую нужно писать с заглавной буквы после "!":

Я сделал скрипт, который работает до определенной степени, но у меня возникают проблемы, когда последняя буква "!".

strin "hello! there!" 

strout = []

for i in range(len(strin)):     
    if strin[i-2] == '!':
        strout.append((strin[i]).capitalize())

    else:
        strout.append(strin[i])
    strout[0] = strout[0].capitalize()

newStr = "".join(strout)

Вывод: ПРИВЕТ! Там!


Что я могу сделать, чтобы вторая буква не была заглавной.
Причина [i-2] заключается в том, что цикл встречает '!' в середине текста заглавная буква i.


person vectorizinglife    schedule 30.06.2019    source источник


Ответы (4)


простым решением было бы использовать заглавные буквы, только если i-2 >= 0.

попробуй это:

strin = "hello! there!"

strout = []

for i in range(len(strin)):
    if i-2>=0 and strin[i-2] == '!':
        strout.append((strin[i]).capitalize())
    else:
        strout.append(strin[i])
strout[0] = strout[0].capitalize()

newStr = "".join(strout)

print(newStr)
person Adam.Er8    schedule 30.06.2019

Что насчет этого:

string = "hello! there!"
'! '.join(map(lambda s: s.lstrip().capitalize(), string.split('!')))
person Cedric H.    schedule 30.06.2019
comment
Что я могу добавить к этому, если я хочу, чтобы после знака препинания и вопросительного знака оно использовалось с большой буквы? - person vectorizinglife; 30.06.2019
comment
@vectorizinglife Не могли бы вы привести пример (тестовая строка и ожидаемый результат)? - person Cedric H.; 01.07.2019

Если i равно нулю или единице, то i-2 будет отображаться на -2 и -1 соответственно. В Python -1 означает последний элемент. Таким образом, как вы заметили, он будет использовать E с большой буквы.

Возможно, имеет смысл начать с индекса 2:

strin = "hello! there!" 

strout = list(strin[:2])
for i in range(2, len(strin)):
    if strin[i-2] == '!':
        strout.append(strin[i].capitalize())
    else:
        strout.append(strin[i])
strout[0] = strout[0].capitalize()
result = ''.join(strout)

При этом использование регулярного выражения, вероятно, здесь более декларативно:

from re import compile as recompile

rgx = recompile(r'(?:[!]\s*|^)[a-z]')

outp = rgx.sub(lambda m: m.group(0).upper(), strin)

Это сделает первый символ, а также все символы, следующие за восклицательным знаком, заглавными, независимо от количества пробелов между ними.

person Willem Van Onsem    schedule 30.06.2019

Я использовал lstrip() в случае, если перед символом, который вы хотите использовать, стоял пробел или пробелы.

string = 'Hello! world'

capitalize = string.split('!')[1].lstrip().capitalize()  # replace .capitalize() with .upper to cap all letters

print(capitalize)
person probat    schedule 30.06.2019