How can I replace all occurrences of a substring using regex?

Question:

I have a string, s = 'sdfjoiweng%@$foo$fsoifjoi', and I would like to replace 'foo' with 'bar'.

I tried re.sub(r'bfoob', 'bar', s) and re.sub(r'[foo]', 'bar', s), but it doesn’t do anything. What am I doing wrong?

Asked By: ThanksInAdvance

||

Answers:

You can replace it directly:

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

It will also work for more occurrences of foo like below:

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

If you want to replace only the 1st occurrence of foo and not all the foo occurrences in the string then alecxe’s answer does exactly that.

Answered By: coder

re.sub(r'bfoob', 'bar', s)

Here, the b defines the word boundaries – positions between a word character (w) and a non-word character – exactly what you have matching for foo inside the sdfjoiweng%@$foo$fsoifjoi string. Works for me:

In [1]: import re

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

In [3]: re.sub(r'bfoob', 'bar', s)
Out[3]: 'sdfjoiweng%@$bar$fsoifjoi'
Answered By: alecxe

You can use replace function directly instead of using regex.

>>> s = 'sdfjoiweng%@$foo$fsoifjoifoo'
>>>
>>> s.replace("foo","bar")
'sdfjoiweng%@$bar$fsoifjoibar'
>>>
>>>
Answered By: Dinesh Pundkar

To further add to the above, the code below shows you how to replace multiple words at once! I’ve used this to replace 165,000 words in 1 step!!

Note b means no sub string matching..must be a whole word..if you remove it then it will make sub-string match.

import re
s = 'thisis a test'
re.sub('bthisb|test','',s)

This gives:

'thisis a '
Answered By: Chadee Fouad
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.