将感叹号后的字母大写

Capitalize letter after exclamation mark

我有字符串需要在“!”之后大写:

我制作了一个在一定程度上有效的脚本,但当最后一个字母是“!”时给我带来了问题。

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.

大写

一个简单的解决方案是仅在 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)

如果 i 为零或一,则 i-2 将分别映射到 -2-1。在 Python 中 -1 表示最后一个元素。所以它会像您注意到的那样将 E 大写。

从索引 2:

开始可能更有意义
strin = "hello! there!" 

strout = <b>list(strin[:2])</b>
for i in range(<b>2</b>, 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)

这将大写第一个字符,以及感叹号后面的所有字符,而不管中间的空格数。

这个怎么样:

string = "hello! there!"
'! '.join(map(lambda s: s.lstrip().capitalize(), string.split('!')))

我使用 lstrip() 以防在要大写的字符前面有 space 或 spaces。

string = 'Hello! world'

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

print(capitalize)