Hyb*_*r1d 3 python python-3.x uppercase
我需要帮助如何在这两个明星之间获得大写.
INPUT: "S*t*a*r*s are every*where*"
OUTPUT: "STaRs are everyWHERE"
我的代码在这里:
def trans(s):
x = ""
a = False
for j in range(len(s)):
if s[j] == "*" or a:
a = True
if a:
x += s[j].upper()
else:
x += s[j]
return "".join(x.replace("*",""))
Run Code Online (Sandbox Code Playgroud)
问题是我不知道循环回到哪里False.现在它只是看到*并使一切都变成大写.

注意:其他答案可以很好地向您展示如何修复代码.这是另一种方法,一旦你学习正则表达式,你会发现它更容易.
你可以使用re.sub功能.
>>> s = "S*t*a*r*s are every*where*"
>>> re.sub(r'\*([^*]*)\*', lambda m: m.group(1).upper(), s)
'STaRs are everyWHERE'
Run Code Online (Sandbox Code Playgroud)
在正则表达式中*是一个特殊的元字符,它重复前一个标记零次或多次.为了匹配文字*,你需要\*在正则表达式中使用.
所以\*([^*]*)\*正则表达式匹配的每对*块即(*t*,*r*,*where*)和在两者之间的字符(本内侧字符*块)由组1捕获.
对于每个匹配,re.sub函数将替换匹配的*..*块string-inside-*.upper().即,它会将upper()函数应用于内部存在的字符串*,并将结果作为替换字符串返回.