我有一个字符串,必须在“!”之后大写:
我制作了一个可以在一定程度上起作用的脚本,但是当最后一个字母为“!”时给了我一个问题。
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 。
答案 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)