Using `re` module it's possible to use escaping for the replace pattern. eg:

```py
def my_replace(string, src, dst):
    import re
    return re.sub(re.escape(src), dst, string)

```

While this works for the most-part, the `dst` string may include `"\\9"` for example.

This causes an issue:

* `\\1`, `\\2` ... etc in `dst`, literals will be interpreted as groups.
* using `re.escape(dst)` causes `.` to be changed to `\.`.

Is there a way to escape the destination without introducing redundant character escaping?

---

Example usage:

```
>>> my_replace("My Foo", "Foo", "Bar")
'My Bar'

```

So far, so good.

---

```
>>> my_replace("My Foo", "Foo", "Bar\\Baz")
...
re.error: bad escape \B at position 3

```

This tries to interpret `\B` as having a special meaning.

---

```
>>> my_replace("My Foo", "Foo", re.escape("Bar\\Baz"))
'My Bar\\Baz'

```

Works!

---

```
>>> my_replace("My Foo", "Foo", re.escape("Bar\\Baz."))
'My Bar\\Baz\\.'

```

The `.` gets escaped when we don't want that.

---

While in this case `str.replace` can be used, the question about destination string remains useful since there may be times we want to use other features of `re.sub` such as the ability to ignore case.