感叹号后的大写字母

时间:2019-06-30 14:48:35

标签: python letter capitalize

我有一个字符串,必须在“!”之后大写:

我制作了一个可以在一定程度上起作用的脚本,但是当最后一个字母为“!”时给了我一个问题。

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

4 个答案:

答案 0 :(得分:5)

那呢:

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

如果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)

这将大写第一个字符以及感叹号之后的所有字符,无论中间有多少空格。

答案 3 :(得分:0)

如果要大写的字符前面有一个空格,我会使用lstrip()。

string = 'Hello! world'

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

print(capitalize)