Ссылка Python re.sub назад не назад
У меня есть следующее:
<text top="52" left="20" width="383" height="15" font="0"><b>test</b></text>
и у меня есть следующее:
fileText = re.sub("<b>(.*?)</b>", "\1", fileText, flags=re.DOTALL)
В котором fileText - это строка, которую я опубликовал выше. Когда я распечатываю fileText
после запуска замены регулярного выражения, я возвращаюсь
<text top="52" left="20" width="383" height="15" font="0"></text>
вместо ожидаемого
<text top="52" left="20" width="383" height="15" font="0">test</text>
Теперь я достаточно разбираюсь в регулярном выражении, и я знаю, что он должен работать, на самом деле я знаю, что он правильно соответствует, потому что я вижу его в groups
, когда я выполняю поиск и распечатываю groups
, но я я новичок в python и не понимаю, почему он не работает с обратными ссылками правильно
Ответы
Ответ 1
Здесь вам нужно использовать raw-string, чтобы обратная косая черта не обрабатывалась как escape-символ:
>>> import re
>>> fileText = '<text top="52" left="20" width="383" height="15" font="0"><b>test</b></text>'
>>> fileText = re.sub("<b>(.*?)</b>", r"\1", fileText, flags=re.DOTALL)
>>> fileText
'<text top="52" left="20" width="383" height="15" font="0">test</text>'
>>>
Обратите внимание, что "\1"
было изменено на r"\1"
. Хотя это очень небольшое изменение (один символ), он имеет большой эффект. См. Ниже:
>>> "\1"
'\x01'
>>> r"\1"
'\\1'
>>>