【问题标题】:Python not replacing % symbolPython 没有替换 % 符号
【发布时间】:2012-02-19 09:10:42
【问题描述】:

我必须替换字符串中的符号,其中一个是 % 符号,现在我以此为例

li = "this is () stuff %"
li.replace('()%', ' ')

但如果我这样做,它根本不会取代任何东西

li = "this is () stuff %"
li.replace('%', ' ')

然后 % 符号被替换没问题,如果我拿走 % 并在那里留下任何其他字符,它们也会被替换,只要我把那个 % 放在那里,整个事情就不起作用了。 奇怪的是,我在不同的机器上试过了,没问题,真的很奇怪

我正在使用 python 2.5.2

谢谢

【问题讨论】:

    标签: python replace symbols


    【解决方案1】:

    顺便说一句,string.translate 很容易解决您的问题

    import string
    table = string.maketrans('()%', '   ')
    li = string.translate(li, table)
    

    【讨论】:

      【解决方案2】:

      replace 匹配并用第二个参数替换整个第一个参数。

      >>> 'abc'.replace('ab', '!')
      '!c'
      >>> 'abc'.replace('abd', '!')
      'abc'
      

      【讨论】:

        【解决方案3】:

        问题是str.replace 仅替换其第一个参数的完整 个匹配项。你想要的可以使用正则表达式来完成:

        import re
        li = "this is () stuff %"
        li = re.sub('[()%]', ' ', li)
        

        【讨论】:

          【解决方案4】:
          li = "this is () stuff %"
          li.replace('()%', ' ')
          

          你为什么希望它做任何事情?字符串"()%" 没有出现在您的原始字符串中。

          此外,您没有将替换结果分配回li,从而丢弃了替换结果。

          假设你想用空格替换每个个字符,那么你想要的是这样的:

          for r in "()%":
             li = li.replace(r, " ")
          

          您也可以使用字符串的translate 方法。

          from string import maketrans
          li = li.translate(maketrans("()%", "   "))
          

          或者您也可以使用正则表达式,但这需要您了解正则表达式,并且由于您目前正在尝试学习 Python,因此可能需要同时解决一些问题。

          【讨论】:

            猜你喜欢
            • 2015-04-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-23
            • 2021-09-02
            • 2020-01-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多