...'
,"..."
Python मध्ये, जर तुम्ही या स्ट्रिंग लिटरल्सला खालीलपैकी एका अक्षरासह उपसर्ग लावला तर, एस्केप सीक्वेन्सचा विस्तार न करता मूल्य स्ट्रिंग होईल.
r
R
Windows पथ आणि रेग्युलर एक्स्प्रेशन पॅटर्न यांसारख्या अनेक बॅकस्लॅश वापरणार्या स्ट्रिंगशी व्यवहार करताना उपयुक्त.
खालील माहिती येथे दिली आहे.
- सुटण्याचा क्रम
- कच्च्या स्ट्रिंगमधील एस्केप सीक्वेन्सकडे दुर्लक्ष करा (अक्षम करा).
- सामान्य स्ट्रिंगला रॉ स्ट्रिंगमध्ये रूपांतरित करा:
repr()
- शेवटी बॅकस्लॅश लक्षात घ्या.
सुटण्याचा क्रम
पायथनमध्ये, सामान्य स्ट्रिंगमध्ये (जसे की टॅब आणि न्यूलाइन्स) दर्शविल्या जाऊ शकत नाहीत अशा वर्णांचे वर्णन सी भाषेप्रमाणेच बॅकस्लॅशसह एस्केप सीक्वेन्स वापरून केले जाते. एस्केप सीक्वेन्सचे उदाहरण खाली दाखवले आहे.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
कच्च्या स्ट्रिंगमधील एस्केप सीक्वेन्सकडे दुर्लक्ष करा (अक्षम करा).
...'
,"..."
तुम्ही अशा स्ट्रिंगचा शाब्दिक उपसर्ग खालीलपैकी एकासह लावल्यास, एस्केप सीक्वेन्सचा विस्तार न करता मूल्य स्ट्रिंग होईल. अशा स्ट्रिंगला रॉ स्ट्रिंग म्हणतात.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
रॉ स्ट्रिंग प्रकार नावाचा कोणताही विशेष प्रकार नाही, तो फक्त एक स्ट्रिंग प्रकार आहे आणि बॅकस्लॅशसह सामान्य स्ट्रिंगच्या बरोबरीचा आहे\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
सामान्य स्ट्रिंगमध्ये, एस्केप अनुक्रम एक वर्ण मानला जातो, परंतु कच्च्या स्ट्रिंगमध्ये, बॅकस्लॅश देखील वर्ण म्हणून गणले जातात. स्ट्रिंगची लांबी आणि प्रत्येक वर्ण खालीलप्रमाणे आहे.
print(len(s))
# 7
print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']
print(len(rs))
# 10
print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']
विंडोज पथ
रॉ स्ट्रिंग वापरणे उपयुक्त आहे जेव्हा तुम्हाला स्ट्रिंग म्हणून Windows पथ दर्शवायचा असेल.
Windows पथ बॅकस्लॅशद्वारे विभक्त केले जातात, त्यामुळे तुम्ही सामान्य स्ट्रिंग वापरल्यास, तुम्हाला खालीलप्रमाणे मार्ग सोडावा लागेल, परंतु तुम्ही रॉ स्ट्रिंग वापरल्यास, तुम्ही ते जसेच्या तसे लिहू शकता. मूल्ये समतुल्य आहेत.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
लक्षात ठेवा की खाली वर्णन केल्याप्रमाणे, विचित्र संख्येच्या बॅकस्लॅशसह समाप्त होणारी स्ट्रिंग त्रुटी देईल. या प्रकरणात, स्ट्रिंगला सामान्य स्ट्रिंग म्हणून लिहिणे आवश्यक आहे किंवा स्ट्रिंगचा फक्त शेवट सामान्य स्ट्रिंग म्हणून लिहून जोडणे आवश्यक आहे.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
repr() सह सामान्य स्ट्रिंग्स रॉ स्ट्रिंगमध्ये रूपांतरित करा
एस्केप सीक्वेन्सकडे दुर्लक्ष करून (अक्षम करणे) सामान्य स्ट्रिंगला रॉ स्ट्रिंगमध्ये रूपांतरित करायचे असल्यास, तुम्ही अंगभूत फंक्शन repr() वापरू शकता.
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
जे repr() रिटर्न देते ते ऑब्जेक्टचे प्रतिनिधित्व करणारी एक स्ट्रिंग असते ज्यामध्ये ती eval() ला पास केल्यावर अग्रगण्य आणि अनुगामी वर्णांसह समान मूल्य असते.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
स्लाइस वापरून, आपण r जोडलेल्या रॉ स्ट्रिंगच्या समतुल्य स्ट्रिंग मिळवू शकतो.
s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB
print(s_r2 == rs)
# True
print(r'\t' == repr('\t')[1:-1])
# True
शेवटी बॅकस्लॅश लक्षात घ्या.
बॅकस्लॅश त्याच्या नंतर लगेचच कोटिंग कॅरेक्टरमधून बाहेर पडत असल्याने, स्ट्रिंगच्या शेवटी बॅकस्लॅशची विषम संख्या असल्यास एरर येईल. बॅकस्लॅशची सम संख्या ठीक आहे.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal