如何使用正则表达式替换所有出现的子字符串?

时间:2016-10-12 16:08:14

标签: python regex

我有一个字符串s = 'sdfjoiweng%@$foo$fsoifjoi',我想将'foo'替换为'bar'

我尝试了re.sub(r'\bfoo\b', 'bar', s)re.sub(r'[foo]', 'bar', s),但它没有做任何事情。我做错了什么?

4 个答案:

答案 0 :(得分:7)

您可以直接替换它:

>>> import re
>>> s = 'sdfjoiweng%@$foo$fsoifjoi'
>>> print re.sub('foo','bar',s)
sdfjoiweng%@$bar$fsoifjoi

它也适用于foo的更多事件,如下所示:

>>> s = 'sdfjoiweng%@$foo$fsoifoojoi'
>>> print re.sub('foo','bar',s)
sdfjoiweng%@$bar$fsoibarjoi

如果您只想替换字符串中第一次出现的foo而不是所有foo次出现,那么alecxe的回答就是这样。

答案 1 :(得分:3)

  

re.sub(r'\bfoo\b', 'bar', s)

此处,\b定义the word boundaries - 单词字符(\w)和非单词字符之间的位置 - 正是您在foo内匹配的内容sdfjoiweng%@$foo$fsoifjoi字符串。适合我:

In [1]: import re

In [2]:  s = 'sdfjoiweng%@$foo$fsoifjoi'

In [3]: re.sub(r'\bfoo\b', 'bar', s)
Out[3]: 'sdfjoiweng%@$bar$fsoifjoi'

答案 2 :(得分:3)

您可以直接使用替换功能,而不是使用正则表达式。

>>> s = 'sdfjoiweng%@$foo$fsoifjoifoo'
>>>
>>> s.replace("foo","bar")
'sdfjoiweng%@$bar$fsoifjoibar'
>>>
>>>

答案 3 :(得分:1)

要进一步添加到上面,下面的代码向您展示了如何一次替换多个单词!我已经用它一步一步替换了165,000个单词!

注意\ b表示没有子字符串匹配。必须是整个单词。如果将其删除,它将使子字符串匹配。

import re
s = 'thisis a test'
re.sub('\bthis\b|test','',s)

这给出了:

'thisis a '