【问题标题】:How can I do the multiple replace in python?如何在 python 中进行多次替换?
【发布时间】:2011-02-07 02:06:20
【问题描述】:

根据this post 的提问和回答,我需要将“[”替换为“[[]”,将“]”替换为“[]]”。

我尝试使用 s.replace(),但由于它没有到位更改,我运行如下得到错误的 anwser。

path1 = "/Users/smcho/Desktop/bracket/[10,20]" path2 = path1.replace('[','[[]') path3 = path2.replace(']','[]]') pathName = os.path.join(path3, "*.txt") 打印路径名 --> /Users/smcho/Desktop/bracket/[[[]]10,20[]]/*.txt
  • 如何在 python 中进行多次替换?
  • 或者如何同时替换 '[' 和 ']'?

【问题讨论】:

  • 使用正则表达式拆分'[' or ']',然后用你想要的替换单个'['和']',然后再加入。

标签: python string replace


【解决方案1】:
import re
path2 = re.sub(r'(\[|])', r'[\1]', path)

解释:

\[|] 将匹配一个括号(打开或关闭)。将其放在括号中将使其捕获到一个组中。然后在替换字符串中,\1 将替换为组的内容。

【讨论】:

  • 我希望在这里看到这个解决方案 :-)。明智的做法是避免毫无意义地拆分和重新加入字符串,因为这可能会导致大量不必要的分配。
【解决方案2】:

我会使用类似的代码

path = "/Users/smcho/Desktop/bracket/[10,20]"
replacements = {"[": "[[]", "]": "[]]"}
new_path = "".join(replacements.get(c, c) for c in path)

【讨论】:

    【解决方案3】:

    还有这个通用的 python 多重替换配方:Single pass multiple replace

    【讨论】:

      【解决方案4】:
      import re
      path2 = re.sub(r'(\[|\])', r'[\1]', path1)
      

      【讨论】:

        【解决方案5】:

        或者,为了避免正则表达式,我会用一个唯一的字符串替换左括号,然后替换右括号,然后替换唯一的字符串——也许是一个回合,但在我看来它看起来更简单——只有一个测试会说如果它更快。另外,我倾向于重复使用相同的名称。

        path1 = "/Users/smcho/Desktop/bracket/[10,20]"
        path1 = path1.replace('[','*UNIQUE*')
        path1 = path1.replace(']','[]]')
        path1 = path1.replace('*UNIQUE*','[[]')
        
        pathName = os.path.join(path1, "*.txt")
        

        【讨论】:

          猜你喜欢
          • 2020-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-05
          相关资源
          最近更新 更多