python用第三个替换两个可选字符串(寻找一个整洁的方式)

时间:2014-03-18 13:03:46

标签: python

我想用第三个替换两个可选字符串,即我希望能够做到:

string.replace(a or b, c)

是的,我可以在预定义的列表上循环,或者我也可以使用两个replace命令。我只是想知道是否有任何我不知道的可用的东西。

示例

我有一个这样的字符串:

'foo bar baz'

我想用'yay'代替'foo',用'yay'代替'bar'来获得:

'yay yay baz'

我可以很容易地做到:

'foo bar baz'.replace('foo', 'yay').replace('bar', 'yay')

但这有点重复。我在想是否有任何巧妙的方法(可能是某些扩展字符串函数的库中的一些深奥的函数......我不知道......)

4 个答案:

答案 0 :(得分:5)

您忘记了re解决方案:

import re
a = "hello world"
print re.sub("hello|world", "foo", a) # "foo foo"

答案 1 :(得分:5)

import re
re.sub("a|b", "c", str)

e.g。

re.sub("foo|bar", "yay", "foo bar baz")

答案 2 :(得分:1)

我认为正则表达式最好。但是这里是蹩脚的纯蟒蛇版本,为了完整起见..

>>> reduce(lambda x,y: x.replace(y, 'yay'), ('foo', 'bar'), 'foo bar baz')
'yay yay baz'

由于lambda,这不是非常pythonic。但你可以用:

删除lambda
  

扩展字符串函数的某些库的一些深奥的函数

这可能看起来像这样:

>>> from string import replace
>>> from functools import partial
>>> function = partial(replace, new='yay')
>>> reduce(function, ('foo', 'bar'), 'foo bar baz')
'yay yay baz'

功能编程人员可能喜欢它,但大多数人更喜欢我认为的正则表达式。

答案 3 :(得分:0)

re.sub(r'abc|def', 'xyz', 'abc def')
'xyz xyz'

你可以使用re.sub