char python之间的大写

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.现在它只是看到*并使一切都变成大写.

国家机器

Avi*_*Raj 5

注意:其他答案可以很好地向您展示如何修复代码.这是另一种方法,一旦你学习正则表达式,你会发现它更容易.

你可以使用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()函数应用于内部存在的字符串*,并将结果作为替换字符串返回.

  • 并非一切都需要正则表达式.这并不能解释OP出错的地方. (5认同)
  • @AvinashRaj:我相信你知道,懒惰是程序员的美德.:)我没有投票,但我同意如果可以找到一个简单的非正则表达式解决方案,应该避免正则表达式,部分原因是正则表达式往往会妨碍可读性,部分原因是正则表达式解决方案不一定有效.我想这些评论不是讨论这个问题的地方,但可以随意在[sopython Chat](http://chat.stackoverflow.com/rooms/6/python)中提出. (3认同)
  • @ PM2Ring:为什么你认为手工实现FSM比指定一个简单的正则表达式更好? (2认同)