【问题标题】:Python replacing all uppercase characters in a string with *Python用*替换字符串中的所有大写字符
【发布时间】:2023-03-21 16:00:01
【问题描述】:

有没有简单直接的方法来转这个字符串:

"aBCd3Fg"

进入:

"a**d3*g"

在 python 2.7 中?

【问题讨论】:

    标签: python string python-2.7 replace character


    【解决方案1】:

    不确定您需要多快,但如果您正在寻找最快的解决方案。 python 字符串模块的translate 函数是一个稍微迂回的方法,但通常是更高效的方法:

    import string
    
    transtab = string.maketrans(string.uppercase, '*'*len(string.uppercase))
    "aBCd3Fg".translate(transtab)
    
    >>>'a**d3*g'
    

    我总是对有多少人不知道这个技巧感到惊讶。 python IMO 中最受保护的秘密之一

    【讨论】:

    • 这是我的建议。
    • @mgilson 很高兴听到它,比 regex 少错误,速度快 2-5,复杂性也略低。
    【解决方案2】:
    import re
    
    print re.sub(r'[A-Z]', '*', "aBCd3Fg")
    

    【讨论】:

      【解决方案3】:
      string = ''.join(['*' if x.isupper() else x for x in string])
      

      【讨论】:

      • 有趣的事实:如果您渴望 C 风格的条件运算符,您可以将表达式 '*' if r == r.upper() else r 缩短为等效的 (r,'*')[r.isupper()]
      • @DarrenStone - 这将消除三元的短路特性并且需要更长的处理时间。 :)
      • @DarrenStone,我知道这种语法,但大多数 python 用户通常不喜欢它。
      • @Smac89 - 说得好。我就是其中之一。 :) 但是,您可以通过使用列表推导而不是生成器表达式来提高代码的效率。这是reference
      • @Smac89,很公平。我更喜欢简洁的表达方式,但每个人都有自己的表达方式。你有什么理由不使用r.isupper()
      【解决方案4】:

      一个简单的解决方案:

      input = "aBCd3Fg"
      output = "".join(['*' if 'A' <= char <= 'Z' else char for char in input ])
      #Long version
      input = "aBCd3Fg"
      output = ''
      for char in input:
          output = output + '*' if ord('A') <= ord(char) <= ord('Z') else output + char
      print output
      

      【讨论】:

        【解决方案5】:

        你也可以这样做:

        for x in myString:
            if (x == 'A','B','C','D','E','F','G','H','I','J','K','L','M',
            'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'"
                x = '*'
        

        这是一个可以完成工作的一小段代码。

        【讨论】:

        • 为什么所有的负面反馈?这不是一个合法的答案吗?
        • 我不是一个反对者,但这个答案不是那么短,而且不会像它显示的那样做。
        猜你喜欢
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 2014-03-14
        • 2016-09-26
        • 2011-03-01
        • 2015-03-19
        • 1970-01-01
        相关资源
        最近更新 更多