Ваш код работает нормально, если вы просто удалите это re.escape
, что я не уверен, почему у нас это будет:
Тест 1
import re
def my_replace(src, dst, string):
return re.sub(src, dst, string)
string = 'abbbbbb'
src = r'(ab)b+'
dst = r'\1z'
print(my_replace(src, dst, string))
Выход 1
abz
Тест 2
import re
def my_replace(src, dst, string):
return re.sub(src, dst, string)
string = re.escape("abbbbbbBar\\Baz")
src = r'(ab)b+'
dst = r'\1z'
print(my_replace(src, dst, string))
Выход 2
abzBar\Baz
Тест 3
import re
def my_replace(src, dst, string):
return re.sub(src, dst, string)
string = re.escape("abbbbbbBar\\Baz")
src = r'(ab)b+'
dst = r'\1' + re.escape('\\z')
print(my_replace(src, dst, string))
Выход 3
ab\zBar\\Baz
Тест 4
Чтобы построить dst
, мы должны сначала знать, будем ли мы заменять нашу строку какими-либо группами захвата, такими как \1
в этом случае. Мы не можем re.escape
\1
, иначе мы заменили бы нашу строку на \\1
, мы должны создать замену, если есть группы захвата, а затем добавить ее к любой другой части, которая требует повторного удаления.
import re
def my_replace(src, dst, string):
return re.sub(src, dst, string)
string = re.escape("abbbbbbBar\\Baz")
src = r'(ab)b+'
dst = r'\1' + re.escape('\9z')
print(my_replace(src, dst, string))
Выход 4
ab\9zBar\\Baz