如何在python中进行多次替换?

时间:2010-04-12 16:10:50

标签: python string replace

根据this post的要求和回答,我需要将'['与'[[]'和']'替换为'[]]'。

我尝试使用s.replace(),但由于它没有到位,我按以下方式运行以获得错误的anwser。

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

5 个答案:

答案 0 :(得分:12)

import re
path2 = re.sub(r'(\[|])', r'[\1]', path)

说明:

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

答案 1 :(得分:3)

我会使用像

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

import re
path2 = re.sub(r'(\[|\])', r'[\1]', path1)

答案 4 :(得分:0)

或者,为了避免正则表达式,我会用一个独特的字符串替换开始括号,然后替换结束括号,然后替换唯一的字符串 - 也许是一个圆的方式,但在我看来它看起来更简单 - 只有一个测试会说它是否更快。此外,我倾向于重复使用相同的名称。

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

pathName = os.path.join(path1, "*.txt")