Проблема с заменой специальных символов в строке

Я пытаюсь передать какой-то текст специальному парсозу. Проблема с этим парсером заключается в том, что он чувствителен к символам ()[] и в моем предложении в тексте их довольно много. В руководстве для синтаксического анализа указано, что все ()[] заменены на \( \) \[ \] . Поэтому, используя str.replace я использую для прикрепления \ ко всем этим символам. Я использую следующий код:

 a = 'abcdef(1234)' a.replace('(','\(') 

однако я получаю это как свой вывод:

 'abcdef\\(1234)' 

Что не так с моим кодом? может ли кто-нибудь предоставить мне решение решить эту проблему для этих персонажей?

Вот как экранированные символы (например, обратные косые черты) печатаются в REPL. Фактическое значение строки соответствует ожидаемому.

 >>> a = '\(' >>> a '\\(' >>> print(a) \( 

В коде нет ничего плохого. Это способ Python сказать вам, что строка содержит литерал \ , показывая вам, что обратная косая черта была экранирована как \\ .

Таким образом, вы можете определить, есть ли у вас два символа, a \ за которым следует ( или только один символ, экранированная скобка \( .

Вероятно, вы ожидали увидеть, что увидите, когда вы print 'abcdef\\(1234)' . То, что вы хотите, это то, что у вас уже есть.

 suggests that all the ()[] get replaced with \( \) \[ \] 

Как я понимаю, парсер сам делает замену, поэтому, если вы введете:

 'abcdef(1234)' 

выход будет:

 'abcdef\(1234\)' 

Поэтому вам нужно разобрать вывод, чтобы получить исходный текст:

 output.replace('\(','(').replace('\)',')')...... 

и т.д…