Python convierte cadenas literales en cadenas

Quiero convertir una cadena literal como r"r'\nasdf'" en una cadena ( '\\nasdf' en este caso).

Otro caso: r"'\nasdf'" a '\nasdf' . Espero que lo obtengas.

Esto es importante, porque tengo un analizador de scripts de Python, que quiere saber el contenido exacto de una cadena literal.

¿ eval es una solución inteligente? Los literales de cadena se filtran antes (con tokenize ) y no deben causar responsabilidades de seguridad. ¿No hay soluciones más nobles que evaluar un literal? Una biblioteca de analizadores tal vez?

Edición : Se agregaron otros ejemplos, para evitar malentendidos.

    Quieres el módulo ast :

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

    Este es un método seguro para evaluar / analizar cadenas que contienen el código fuente de Python (a diferencia de eval() ).

    Sí hay:

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