क्या पायथन में एक फ़ंक्शन है जो मैं नियमित अभिव्यक्ति में विशेष पात्रों से बचने के लिए उपयोग कर सकता हूं?
उदाहरण के लिए, I'm "stuck" :\
बनना चाहिए I\'m \"stuck\" :\\
।
क्या पायथन में एक फ़ंक्शन है जो मैं नियमित अभिव्यक्ति में विशेष पात्रों से बचने के लिए उपयोग कर सकता हूं?
उदाहरण के लिए, I'm "stuck" :\
बनना चाहिए I\'m \"stuck\" :\\
।
जवाबों:
उपयोग re.escape
>>> import re
>>> re.escape(r'\ a.*$')
'\\\\\\ a\\.\\*\\$'
>>> print(re.escape(r'\ a.*$'))
\\\ a\.\*\$
>>> re.escape('www.stackoverflow.com')
'www\\.stackoverflow\\.com'
>>> print(re.escape('www.stackoverflow.com'))
www\.stackoverflow\.com
इसे यहाँ दोहरा रहे हैं:
re.escape (स्ट्रिंग)
सभी गैर-अल्फ़ान्यूमेरिक्स बैकस्लैश्ड के साथ वापसी स्ट्रिंग; यह उपयोगी है यदि आप एक मनमाना शाब्दिक स्ट्रिंग से मेल खाना चाहते हैं जो इसमें नियमित रूप से अभिव्यक्ति रूपक हो सकता है।
अजगर के रूप में 3.7 re.escape()
को केवल उन पात्रों से बचने के लिए बदल दिया गया था जो रेगेक्स संचालन के लिए सार्थक हैं।
regex.escape(pattern,string,special_only=True
मुझे आश्चर्य है कि किसी ने नियमित अभिव्यक्ति का उपयोग करके उल्लेख नहीं किया है re.sub()
:
import re
print re.sub(r'([\"])', r'\\\1', 'it\'s "this"') # it's \"this\"
print re.sub(r"([\'])", r'\\\1', 'it\'s "this"') # it\'s "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"') # it\'s\ \"this\"
ध्यान देने योग्य महत्वपूर्ण बातें:
\
चरित्र (रों) आप देख रहे हैं और साथ ही। आप का उपयोग करने जा रहे हैं \
तो आप से बचने के लिए की जरूरत है अपने पात्रों से बचने के लिए,
कि अच्छी तरह से।([\"])
, ताकि प्रतिस्थापन
पैटर्न पाया चरित्र का उपयोग कर सके जब वह इसके \
सामने जोड़ता है। (यह वही
\1
करता है: पहले कोष्ठक समूह के मूल्य का उपयोग करता है।)r
के सामने r'([\"])'
साधन यह एक है कच्चे स्ट्रिंग । कच्चे तार बैकस्लैश से बचने के लिए विभिन्न नियमों का उपयोग करते हैं। ([\"])
एक सादे स्ट्रिंग के रूप में लिखने के लिए , आपको सभी बैकस्लैश को दोगुना करना होगा और लिखना होगा '([\\"])'
। जब आप नियमित अभिव्यक्ति लिख रहे हैं तो कच्चे तार मित्रवत हैं।\
एक बैकस्लैश कि एक प्रतिस्थापन समूह के पहले आता है, जैसे से अलग करने \1
, इसलिए r'\\\1'
। लिखने के लिए
है कि एक सादे स्ट्रिंग के रूप में, आप आवश्यकता होगी '\\\\\\1'
- और कोई भी नहीं चाहता।Repr () [1: -1] का उपयोग करें। इस मामले में, दोहरे उद्धरण चिह्नों से बचने की आवश्यकता नहीं है। [-1: 1] टुकड़ा शुरुआत और अंत से एकल उद्धरण को हटाने के लिए है।
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck" :\
>>> print repr(x)[1:-1]
I\'m "stuck" :\\
या हो सकता है कि आप सिर्फ अपने कार्यक्रम में पेस्ट करने के लिए एक वाक्यांश से बचना चाहते हैं? यदि हां, तो यह करें:
>>> raw_input()
I'm "stuck" :\
'I\'m "stuck" :\\'
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])
प्रिंट I'm stuck
।
जैसा कि ऊपर उल्लेख किया गया था, उत्तर आपके मामले पर निर्भर करता है। यदि आप नियमित अभिव्यक्ति के लिए एक स्ट्रिंग से बचना चाहते हैं तो आपको re.escape () का उपयोग करना चाहिए। लेकिन अगर आप वर्णों के एक विशेष सेट से बचना चाहते हैं तो इस लंबो फ़ंक्शन का उपयोग करें:
>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)
>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck" :\
>>> print escape(s, "\\", ['"'])
I'm \"stuck\" :\\
यह इतना मुश्किल नही है:
def escapeSpecialCharacters ( text, characters ):
for character in characters:
text = text.replace( character, '\\' + character )
return text
>>> escapeSpecialCharacters( 'I\'m "stuck" :\\', '\'"' )
'I\\\'m \\"stuck\\" :\\'
>>> print( _ )
I\'m \"stuck\" :\
characters
बेहतर था कि वह पहले वाला हो!
यदि आप केवल कुछ वर्णों को बदलना चाहते हैं जो आप इसका उपयोग कर सकते हैं:
import re
print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")