2009-12-11 9 views
65

मान लीजिए कि मेरे पास एक स्ट्रिंग है जो एक और स्ट्रिंग का बैकस्लैश-एस्केप संस्करण है। क्या स्ट्रिंग को अनदेखा करने के लिए पाइथन में एक आसान तरीका है? मैं, उदाहरण के लिए, कर सकता है:मैं पाइथन में बैकस्लैश-एस्केपड स्ट्रिंग को कैसे से बच सकता हूं?

>>> escaped_str = '"Hello,\\nworld!"' 
>>> raw_str = eval(escaped_str) 
>>> print raw_str 
Hello, 
world! 
>>> 

हालांकि कि एक (संभवतः अविश्वस्त) स्ट्रिंग गुजर eval करने के लिए(), जो एक सुरक्षा जोखिम है शामिल है। क्या मानक lib में कोई फ़ंक्शन है जो स्ट्रिंग लेता है और कोई सुरक्षा प्रभाव वाले स्ट्रिंग का उत्पादन करता है?

उत्तर

111
>>> print '"Hello,\\nworld!"'.decode('string_escape') 
"Hello, 
world!" 
+5

+1 ओए मैं सभी शांत चाल मैं अतः से सीख से प्यार है! – jathanism

+0

अच्छी चाल लेकिन मेरे लिए पूरी तरह से काम नहीं किया – sleepycal

+2

क्या कुछ ऐसा है जो अजगर 3 के साथ संगत है? – thejinx0r

18

आप ast.literal_eval उपयोग कर सकते हैं जो सुरक्षित है:

Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None. (END)

इस तरह

:

>>> import ast 
>>> escaped_str = '"Hello,\\nworld!"' 
>>> print ast.literal_eval(escaped_str) 
Hello, 
world! 
+0

xy समस्या मुझे दोबारा काटती है। इसके लिए धन्यवाद! – trianta2

+1

स्ट्रिंग में एक बच निकला अर्ध-कॉलन होने से यह कोड टूट जाता है। एक वाक्यविन्यास त्रुटि "पंक्ति निरंतरता चरित्र के बाद अप्रत्याशित चरित्र" फेंकता है – darksky

+1

@ डार्कस्की नोटिस कि 'ast' लाइब्रेरी को आपके escaped_str के आस-पास उद्धरण (या तो '' '' '' '' '' "" चूंकि यह वास्तव में इसे पायथन कोड के रूप में चलाने की कोशिश कर रहा है लेकिन सुरक्षा को बढ़ाता है (स्ट्रिंग इंजेक्शन को रोकता है) – no1xsyzy

संबंधित मुद्दे