कच्चे पायथन स्ट्रिंग में एक उद्धरण कैसे शामिल करें


89

विचार करें:

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'

तो हम बोली कैसे प्राप्त करें, लेकिन स्लैश नहीं?

और कृपया सुझाव न दें r'what"ever', क्योंकि तब सवाल सिर्फ यह हो जाता है कि हम दोनों प्रकार के उद्धरण कैसे शामिल करें?

सम्बंधित


कच्चे तार (रेगेक्स और अन्य मामलों के लिए प्रेरक उपयोग मामले में जहां पायथन के अलावा कुछ और बैकस्लैश की व्याख्या करता है), बैकस्लैश ठीक है, क्योंकि यह रेगेक्स इंजन (जो भी इंजन होगा) द्वारा संसाधित किया जाएगा। यह उन सभी मामलों पर लागू नहीं होता है जहाँ आप कच्चे तार का उपयोग करना चाहते हैं, लेकिन यह सुनिश्चित करने के बारे में सोचें कि क्या यह आपके उपयोग के मामले पर लागू होता है, इससे पहले कि आप बैकस्लैश को बाहर निकालने की कोशिश करें।
user2357112

जवाबों:


146

यदि आप स्ट्रिंग्स में दोहरे उद्धरण चिह्नों का उपयोग करना चाहते हैं लेकिन एकल उद्धरणों का उपयोग नहीं करते हैं, तो आप केवल एकल उद्धरणों को परिसीमाक के रूप में उपयोग कर सकते हैं:

r'what"ever'

यदि आपको अपनी स्ट्रिंग में दोनों प्रकार के उद्धरणों की आवश्यकता है, तो ट्रिपल-उद्धृत स्ट्रिंग का उपयोग करें:

r"""what"ev'er"""

यदि आप दोनों प्रकार के ट्रिपल-उद्धृत स्ट्रिंग्स को अपने स्ट्रिंग में शामिल करना चाहते हैं (एक अत्यधिक संभावना नहीं है), तो आप ऐसा नहीं कर सकते हैं, और आपको पलायन के साथ गैर-कच्चे तारों का उपयोग करना होगा।


1
अति उत्कृष्ट। मुझे एहसास हुआ कि मैं ट्रिपल-उद्धृत स्ट्रिंग्स को कच्चा भी बना सकता हूं।
एमपीएन

3
मुझे अंतिम पैराग्राफ भी पसंद है ... यह वही था जो मैं जानने की कोशिश कर रहा था। विभिन्न उद्धरण शैलियों की सीमाएं। मैं पायथन r"raw string"और सी # की तुलना कर रहा हूं @"@-quoted string"और"""triple quotes"""
एमपीएन

2
पायथन न्यूब यहां, थोड़ा भ्रमित, r'what"ever"एक पार्स त्रुटि नहीं है? क्या आपका मतलब था r'what"ever'?
nmr

1
पायथन डेवलपर्स के साथ क्या गलत है? उन्होंने हर तरह से भागने की व्यवस्था को लागू क्यों नहीं किया जैसे कि हर दूसरी भाषा करती है?
जेम्बी

6
@ जैम्बी उनके पास एक भागने की व्यवस्था है, आप बस इसे गैर-कच्चे स्ट्रिंग (उनके सामने आर के बिना तार) के साथ उपयोग करते हैं, और यह हर दूसरी भाषा की तरह बहुत काम करता है ।
कोबर्न

10

पायथन में स्ट्रिंग्स करने का एक से अधिक तरीका है। निम्नलिखित स्ट्रिंग वाक्यविन्यास आपको दोहरे उद्धरण चिह्नों का उपयोग करने की अनुमति देगा:

'''what"ever'''

आपने प्रश्न का कच्चा हिस्सा याद किया ।
एमपीएन

10

यदि आपको किसी भी प्रकार के उद्धरण (एकल, दोहरे और दोनों के लिए ट्रिपल) की आवश्यकता है, तो आप "संयोजन" (0) स्ट्रिंग्स कर सकते हैं:

>>> raw_string_with_quotes = r'double"' r"single'" r'''double triple""" ''' r"""single triple''' """
>>> print raw_string_with_quotes
double"single'double triple""" single triple'''

आप "गठबंधन" (0) गैर-कच्चे तार के साथ कच्चे तार कर सकते हैं:

>>> r'raw_string\n' 'non-raw string\n'
'raw_string\\nnon-raw string\n'

(0): वास्तव में, पायथन पार्सर तार से जुड़ता है, और यह कई तार नहीं बनाता है। यदि आप "+" ऑपरेटर जोड़ते हैं, तो कई तार बनाए जाते हैं और संयुक्त होते हैं।


5

कोई बात नहीं, जवाब कच्चे ट्रिपल उद्धृत तार है:

r"""what"ever"""

3

चूँकि मैं इस जवाब पर लड़खड़ाया, और इससे मुझे बहुत मदद मिली, लेकिन मुझे एक मामूली वाक्यविन्यास मुद्दा मिला, मुझे लगा कि मुझे दूसरों को निराशा से बचाना चाहिए। ट्रिपल उद्धृत स्ट्रिंग इस परिदृश्य के लिए वर्णित के रूप में काम करती है, लेकिन ध्यान दें कि "यदि आप स्ट्रिंग में स्ट्रिंग के अंत में चाहते हैं तो:"

somestr = """This is a string with a special need to have a " in it at the end""""

आप निष्पादन में त्रुटि करेंगे क्योंकि पंक्ति में "" "" (4) उद्धरण स्ट्रिंग रीडर को भ्रमित करता है, क्योंकि यह सोचता है कि यह पहले से ही स्ट्रिंग के अंत में हिट हो गया है और फिर वहां से एक यादृच्छिक "खोजता है। आप इसे सत्यापित कर सकते हैं।" 4 उद्धरणों में एक स्थान सम्मिलित करके जैसे: "" "" और इसमें त्रुटि नहीं होगी।

इस विशेष मामले में आपको या तो उपयोग करने की आवश्यकता होगी:

somestr = 'This.....at the end"'

या मिश्रित "और 'के साथ कई तारों के निर्माण के ऊपर वर्णित विधि का उपयोग करें और फिर तथ्य के बाद उन्हें संक्षिप्त करें।


1

बस नई पायथन च को शामिल करने के लिए स्ट्रिंग संगत कार्यक्षमता:

var_a = 10

f"""This is my quoted variable: "{var_a}". """

f- स्ट्रिंग्स हालांकि, बचने का समर्थन करते हैं? तो आप कर सकते हैं f"foo\"bar"
एमपीएन

-3

उपयोग:

dqote='"'
sqote="'"

'+' ऑपरेटर dqoteऔर squoteचर का उपयोग करें जो आपको चाहिए।

अगर मैं चाहूं sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/, तो आप निम्नलिखित कोशिश कर सकते हैं:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.