a = 'RXIE-SERVER\\MSSQLSERVER_NEW'
не имеет двойной бэкслы sh. У него есть экранированный одиночный backsla sh, просто безопаснее (и в конечном итоге потребуется) его избежать, поэтому Python не думает, что \M
- это попытка выхода из строки. Если вы сделаете:
print(a)
, вы увидите, что он печатает только один backsla sh (потому что print
выводит необработанные данные, не показывая экранирования).
Причина a.replace('\\', '')
не работает, потому что он заменил одиночную обратную косую черту sh ничем (и это сделало бы это для всех обратных косых черт); a.replace('\\\\', '\\')
не работает, потому что '\\\\'
представляет действительную удвоенную обратную косую черту sh, и у вас ее нет.
Если ваш входной сигнал поступил из какого-то другого источника (не литерала, который вы описали ) и на самом деле имеет удвоенную обратную косую черту sh, тогда a.replace('\\\\', '\\')
фактически работает, но REPL повторяет repr
объекта, а для str
это означает добавление обратной косой черты sh чтобы сделать его легальным, эквивалентным str
литералом, он выглядел как двойной бэкслла sh, но имел только один. Если вы измените >>> a.replace('\\\\', '\\')
на >>> print(a.replace('\\\\', '\\'))
(который печатает удобную для человека форму, а не repr
), вы увидите, что он отображает только одну обратную косую черту sh.
Если вы не Не похоже на то, как это выглядит в вашем коде, используйте необработанные строки, чтобы убрать необходимость в escape:
a = r'RXIE-SERVER\MSSQLSERVER_NEW'
# ^ note prefix that makes it raw