Подтвердить что ты не робот

Python преобразует строковые литералы в строки

Я хочу преобразовать строковый литерал как r"r'\nasdf'" в строку ('\\nasdf' в этом случае).

Другой случай: от r"'\nasdf'" до '\nasdf'. Надеюсь, вы это поняли.

Это важно, потому что у меня есть парсер сценариев python, который хочет знать точное содержимое строкового литерала.

Является ли eval умным решением? Строковые литералы фильтруются до (с tokenize) и не должны вызывать обязательства безопасности. Разве нет более благородных решений, чем оценка литерала? Возможно, библиотека парсера?

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

4b9b3361

Ответ 1

Вам нужен ast модуль:

>>> import ast
>>> raw = r"r'\nasdf'"
>>> ast.literal_eval(raw)
'\\nasdf'
>>> raw = r"'\nasdf'"
>>> ast.literal_eval(raw)
'\nasdf'

Это безопасный метод для оценки/синтаксического анализа строк, содержащих исходный код Python (в отличие от eval()).

Ответ 2

Да, есть:

>>> s = r'\nasdf'
>>> s.decode('string-escape')
'\nasdf'