2012-05-08 164 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

對不起,我的問題不太清楚(我編輯)。這是一個字符串轉換的原始字符串,不是字符串字符串轉換。 –