जवाबों:
यदि आप जिन उद्धरणों को पट्टी करना चाहते हैं, वे हमेशा "पहले और अंतिम" होने जा रहे हैं, जैसा कि आपने कहा, तो आप बस उपयोग कर सकते हैं:
string = string[1:-1]
यदि आप यह नहीं मान सकते हैं कि आपके द्वारा संसाधित की जाने वाली सभी स्ट्रिंग्स में दोहरे उद्धरण चिह्नों का उपयोग किया जा सकता है:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
संपादित करें:
मुझे यकीन है कि आपने यहां केवल stringउदाहरण के लिए चर नाम का उपयोग किया है और आपके वास्तविक कोड में इसका एक उपयोगी नाम है, लेकिन मुझे आपको यह चेतावनी देने के लिए बाध्य है कि stringमानक पुस्तकालयों में एक मॉड्यूल नाम है। यह स्वचालित रूप से लोड नहीं है, लेकिन यदि आप कभी भी उपयोग करते हैं import stringतो सुनिश्चित करें कि आपका चर इसे ग्रहण नहीं करता है।
पहले और अंतिम वर्णों को हटाने के लिए, और प्रत्येक मामले में निष्कासन केवल तभी होता है जब प्रश्न में वर्ण दोहरा उद्धरण हो:
import re
s = re.sub(r'^"|"$', '', s)
ध्यान दें कि आरई पैटर्न आपके द्वारा दिए गए से अलग है, और ऑपरेशन subएक खाली प्रतिस्थापन स्ट्रिंग के साथ ("विकल्प") है ( stripएक स्ट्रिंग विधि है लेकिन आपकी आवश्यकताओं से बहुत अलग है, जैसा कि अन्य उत्तरों ने संकेत दिया है)।
startsWith।
महत्वपूर्ण: मैं सिंगल या डबल कोट्स को स्ट्रिप करने के लिए प्रश्न / उत्तर का विस्तार कर रहा हूं। और मैं इस सवाल का अर्थ बताता हूं कि पट्टी को प्रस्तुत करने के लिए दोनों कोठियों को मौजूद होना चाहिए, और मिलान होना चाहिए। अन्यथा, स्ट्रिंग अपरिवर्तित लौटा दी जाती है।
एक स्ट्रिंग प्रतिनिधित्व को "निर्विवाद" करने के लिए, जिसके आस-पास एकल या दोहरे उद्धरण हो सकते हैं (यह @ tgray के उत्तर का विस्तार है):
def dequote(s):
"""
If a string has single or double quotes around it, remove them.
Make sure the pair of quotes match.
If a matching pair of quotes is not found, return the string unchanged.
"""
if (s[0] == s[-1]) and s.startswith(("'", '"')):
return s[1:-1]
return s
स्पष्टीकरण:
startswithकई विकल्पों में से किसी से मेल खाने के लिए, एक टपल ले सकते हैं। DOUBLED कोष्ठकों का कारण ((और ))ऐसा है कि हम दो मापदंडों के बजाय अनुमत उपसर्गों को निर्दिष्ट करने के ("'", '"')लिए एक पैरामीटर पास startswith()करते हैं "'"और '"', जिसे एक उपसर्ग और (अमान्य) प्रारंभ स्थिति के रूप में व्याख्या किया जाएगा।
s[-1] स्ट्रिंग में अंतिम वर्ण है।
परिक्षण:
print( dequote("\"he\"l'lo\"") )
print( dequote("'he\"l'lo'") )
print( dequote("he\"l'lo") )
print( dequote("'he\"l'lo\"") )
=>
he"l'lo
he"l'lo
he"l'lo
'he"l'lo"
(मेरे लिए, रेगेक्स एक्सप्रेशन पढ़ने में स्पष्ट नहीं हैं, इसलिए मैंने @ एलेक्स के उत्तर का विस्तार करने की कोशिश नहीं की।)
len(s) >= 2, या कुछ समान जोड़ सकते हैं ।
लगभग हो गया। Http://docs.python.org/library/stdtypes.html?highlight=strip#t.rip से उद्धरण
वर्ण तर्क एक स्ट्रिंग है जो वर्णों के सेट को हटाने के लिए निर्दिष्ट करता है।
[...]
वर्ण तर्क कोई उपसर्ग या प्रत्यय नहीं है; बल्कि, इसके मूल्यों के सभी संयोजन छीन लिए गए हैं:
तो तर्क एक रेगेक्स नहीं है।
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
ध्यान दें, यह वही नहीं है जो आपने अनुरोध किया था, क्योंकि यह स्ट्रिंग के दोनों छोर से कई उद्धरण खाता है!
मेरे पास कुछ कोड हैं जिन्हें सिंगल या डबल कोट्स को स्ट्रिप करने की आवश्यकता है, और मैं इसे ast.literal_eval नहीं कर सकता।
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
यह टूलमेकरसैटव के उत्तर के समान है, लेकिन यह 0 लंबाई के तार की अनुमति देता है, और एकल वर्ण "को खाली स्ट्रिंग में नहीं बदलता है।
नीचे फ़ंक्शन खाली स्पाइसेस को स्ट्रिप करेगा और बिना उद्धरण के स्ट्रिंग लौटाएगा। यदि कोई उद्धरण नहीं है तो यह उसी स्ट्रिंग को लौटा देगा (छीन लिया गया)
def removeQuote(str):
str = str.strip()
if re.search("^[\'\"].*[\'\"]$",str):
str = str[1:-1]
print("Removed Quotes",str)
else:
print("Same String",str)
return str
में शुरू Python 3.9, आप उपयोग कर सकते हैं removeprefixऔर removesuffix:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip, कृपया ध्यान दें कि a) यह विधि अपने तर्क के रूप में एक regex नहीं लेती है, b) आपके द्वारा आपूर्ति की गई regex ने वैसे भी काम नहीं किया होगा और c) यह विधि सभी आसन्न वर्णों को स्ट्रिप्स करती है, केवल एक नहीं, इसलिए आपने दो दोहरे उद्धरण खो दिए होंगे.strip('"')।