I have a string, s = 'sdfjoiweng%@$foo$fsoifjoi', and I would like to replace 'foo' with 'bar'.
I tried re.sub(r'\bfoo\b', 'bar', s) and re.sub(r'[foo]', 'bar', s), but it doesn't do anything. What am I doing wrong?
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.
re.sub(r'\bfoo\b', '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'\bfoo\b', 'bar', s) Out[3]: 'sdfjoiweng%@$bar$fsoifjoi'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With