Проблема с заменой специальных символов в строке - PullRequest
2 голосов
/ 10 марта 2011

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

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

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

'abcdef\\(1234)'

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

Ответы [ 3 ]

4 голосов
/ 10 марта 2011

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

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

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

3 голосов
/ 10 марта 2011

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

>>> a = '\('
>>> a
'\\('
>>> print(a)
\(
1 голос
/ 10 марта 2011
suggests that all the ()[] get replaced with \( \) \[ \]

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

'abcdef(1234)'

вывод будет:

'abcdef\(1234\)'

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

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

и т.д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...