我想使用.replace函数来替换多个字符串。
我现在有
string.replace("condition1", "")
但想要有类似下面这样多次替换的东西
string.replace("condition1", "").replace("condition2", "text")
虽然这不觉得好的语法
什么是正确的方法来做到这一点?有点像在grep /regex中你可以做\1 和\2 来替换字段到某些搜索字符串
最佳解决方法
这里是一个简短的例子,应该用正则表达式来实现:
import re
rep = {"condition1": "", "condition2": "text"} # define desired replacements here
# use these three lines to do the replacement
rep = dict((re.escape(k), v) for k, v in rep.iteritems())
pattern = re.compile("|".join(rep.keys()))
text = pattern.sub(lambda m: rep[re.escape(m.group(0))], text)
例如:
>>> pattern.sub(lambda m: rep[re.escape(m.group(0))], "(condition1) and --condition2--")
'() and --text--'
次佳解决方法
你可以做一个漂亮的小循环函数。
def replace_all(text, dic):
for i, j in dic.iteritems():
text = text.replace(i, j)
return text
其中text 是完整的字符串,dic 是一个字典 – 每个定义是一个字符串,将替换匹配的术语。
注意:在Python 3中,iteritems() 已被替换为items()
小心:请注意,这个答案要求:
-
替换是顺序无关的
-
每次替换都可以更改以前替换的结果
这是因为python字典没有可靠的迭代顺序。
例如,如果一本字典有:
{ "cat": "dog", "dog": "pig"}
和字符串是:
"This is my cat and this is my dog."
我们不一定知道首先使用哪个字典条目,结果是:
"This is my pig and this is my pig."
或者
"This is my dog and this is my pig."
记住text 字符串有多大以及字典中有多少对是有效的。
第三种解决方法
这是使用reduce的第一个解决方案的一个变体,如果你喜欢函数式编程。 |