2012-05-08 196 views
13

我想将字符串文字如r"r'\nasdf'"转换为字符串(本例中为'\\nasdf')。Python将字符串文字转换为字符串

另一种情况:r"'\nasdf'"'\nasdf'。 我希望你明白。

这很重要,因为我有一个python脚本解析器,它想知道字符串文字的确切内容。

eval一个巧妙的解决方案?字符串文字在之前被过滤(与tokenize)并且不应该导致安全责任。没有任何高贵的解决方案比评估文字?解析器库可能?

编辑:增加了其他例子,以避免误解。

+0

这将是一个'原始'字符串,而不是'字面' –

+0

我认为我没有制定我的问题是正确的,我试图再做正确的。我的意思是字符串文字,而不是原始字符串。 –

+0

够清楚了。和literal_eval是更高贵的解决方案:) –

回答

16

你想要的ast module

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

这是评估包含Python源代码(不同于eval())/解析字符串的一种安全的方法。

8

是的,有:

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

对不起,我的问题不太清楚(我编辑)。这是一个字符串转换的原始字符串,不是字符串字符串转换。 –