पाइथन में केस-असंवेदनशील स्ट्रिंग प्रतिस्थापन करने का सबसे आसान तरीका क्या है?केस असंवेदनशील
उत्तर
string
प्रकार इसका समर्थन नहीं करता है। re.IGNORECASE विकल्प के साथ आप शायद the regular expression sub method का उपयोग कर सबसे अच्छे हैं।
>>> import re
>>> insensitive_hippo = re.compile(re.escape('hippo'), re.IGNORECASE)
>>> insensitive_hippo.sub('giraffe', 'I want a hIPpo for my birthday')
'I want a giraffe for my birthday'
import re
pattern = re.compile("hello", re.IGNORECASE)
pattern.sub("bye", "hello HeLLo HELLO")
# 'bye bye bye'
यह आवश्यकता नहीं है RegularExp
def ireplace(old, new, text):
"""
Replace case insensitive
Raises ValueError if string not found
"""
index_l = text.lower().index(old.lower())
return text[:index_l] + new + text[index_l + len(old):]
अच्छा, हालांकि यह पुरानी सभी घटनाओं को नए से नहीं बदलता है, लेकिन केवल पहली घटना है। – rsmoorthy
यह regex संस्करण से कम पठनीय है। यहां पहिया को फिर से शुरू करने की जरूरत नहीं है। –
इस और ऊपर के संस्करणों के बीच प्रदर्शन तुलना करना दिलचस्प होगा, यह तेज़ हो सकता है, जो कुछ अनुप्रयोगों के लिए महत्वपूर्ण है। या यह धीमा हो सकता है क्योंकि यह व्याख्यान पायथन में अधिक काम करता है। –
bFloch के जवाब पर जारी रखते हुए, इस समारोह नहीं एक बदल जाएगा, लेकिन नए के साथ पुराने की सभी घटनाओं - एक केस संवेदी फैशन में।
def ireplace(old, new, text):
idx = 0
while idx < len(text):
index_l = text.lower().find(old.lower(), idx)
if index_l == -1:
return text
text = text[:index_l] + new + text[index_l + len(old):]
idx = index_l + len(new)
return text
बहुत अच्छी तरह से किया। रेगेक्स से काफी बेहतर; यह सभी प्रकार के पात्रों को संभालता है, जबकि रेगेक्स गैर-अल्फान्यूमेरिक के बारे में बहुत उग्र है। पसंदीदा उत्तर IMHO। – fyngyrz
आपको बस इतना करना है कि रेगेक्स से बचें: स्वीकृत उत्तर इस से पढ़ने के लिए बहुत छोटा और आसान है। –
से पहले एक जवाब कभी नहीं पोस्ट और इस सूत्र वास्तव में पुराना है, लेकिन मैं एक और sollution के साथ आया था और लगा मैं अपने प्रतिसाद देने मिल सकता है, मैं अजगर प्रोग्रामिंग में अनुभवी नहीं है, इसलिए यदि वहाँ यह करने के लिए appearant कमियां हैं, कृपया बात उन्हें बाहर अपनी अच्छी सीखने :)
i='I want a hIPpo for my birthday'
key='hippo'
swp='giraffe'
o=(i.lower().split(key))
c=0
p=0
for w in o:
o[c]=i[p:p+len(w)]
p=p+len(key+w)
c+=1
print(swp.join(o))
सीखने के लिए: आम तौर पर जब आप एक स्ट्रिंग पर खोज करते हैं और प्रतिस्थापित करते हैं, तो बेहतर है कि इसे पहले किसी सरणी में बदलना न पड़े। यही कारण है कि पहला जवाब शायद सबसे अच्छा है। जबकि यह बाहरी मॉड्यूल का उपयोग कर रहा है, यह स्ट्रिंग को एक संपूर्ण स्ट्रिंग के रूप में पेश कर रहा है। यह प्रक्रिया में क्या हो रहा है यह थोड़ा स्पष्ट है। – isaaclw
बहुत ही सरल, एक पंक्ति में के बाद से:
import re
re.sub("(?i)hello","bye", "hello HeLLo HELLO") #'bye bye bye'
re.sub("(?i)he\.llo","bye", "he.llo He.LLo HE.LLO") #'bye bye bye'
या, तर्क वैकल्पिक "झंडे" का उपयोग करें:
import re
re.sub("hello", "bye", "hello HeLLo HELLO", flags=re.I) #'bye bye bye'
re.sub("he\.llo", "bye", "he.llo He.LLo HE.LLO", flags=re.I) #'bye bye bye'
ब्लेयर कॉनराड की तरह स्ट्रिंग.रप्लेस इसका समर्थन नहीं करता है।
regex re.sub
का उपयोग करें, लेकिन पहले प्रतिस्थापन स्ट्रिंग से बचने के लिए याद रखें। ध्यान दें कि re.sub
के लिए 2.6 में कोई झंडे-विकल्प नहीं है, इसलिए आपको एम्बेडेड संशोधक '(?i)'
(या आरई-ऑब्जेक्ट, ब्लेयर कॉनराड के उत्तर देखें) का उपयोग करना होगा। इसके अलावा, एक और गड़बड़ यह है कि यदि स्ट्रिंग दी जाती है तो उप-प्रतिस्थापन बैकस्लैश प्रतिस्थापन टेक्स्ट में भाग लेगा। इससे बचने के लिए इसके बजाय एक लैम्ब्डा में गुजर सकता है।
import re
def ireplace(old, repl, text):
return re.sub('(?i)'+re.escape(old), lambda m: repl, text)
>>> ireplace('hippo?', 'giraffe!?', 'You want a hiPPO?')
'You want a giraffe!?'
>>> ireplace(r'[binfolder]', r'C:\Temp\bin', r'[BinFolder]\test.exe')
'C:\\Temp\\bin\\test.exe'
मैं \ t escape sequences में बदला जा रहा (थोड़ा नीचे स्क्रॉल करें) हो रही थी, तो मैं ने कहा कि re.sub धर्मान्तरित दृश्यों से बचने के लिए भाग निकले पात्रों backslashed:
यहाँ एक समारोह है।
को रोकने के लिए है कि मैं निम्नलिखित लिखा है:
केस संवेदी बदलें।
import re
def ireplace(findtxt, replacetxt, data):
return replacetxt.join( re.compile(findtxt, flags=re.I).split(data) )
इसके अलावा
, यदि आप इसे अन्य उत्तर यहाँ विशेष अर्थ bashslash पात्रों दृश्यों से बचने के लिए परिवर्तित हो रही है उस तरह, भागने पात्रों के साथ बदलने के लिए, बस अपने खोज डिकोड और, या स्ट्रिंग की जगह चाहते हैं। अजगर 3 में, .decode की तरह कुछ करने के लिए ("unicode_escape") # python3
findtxt = findtxt.decode('string_escape') # python2
replacetxt = replacetxt.decode('string_escape') # python2
data = ireplace(findtxt, replacetxt, data)
अजगर 2.7.8
आशा है कि मदद करता है में परीक्षण किया गया हो सकता है।
- 1. केस-असंवेदनशील
- 2. केस असंवेदनशील स्ट्रिंग तुलना
- 3. अभिव्यक्ति और केस-असंवेदनशील
- 4. केस असंवेदनशील सभी
- 5. केस असंवेदनशील खोज/प्रश्न
- 6. केस असंवेदनशील शब्दकोश खोज?
- 7. ऐरेलिस्ट तत्व केस-असंवेदनशील
- 8. केस-असंवेदनशील array_unique
- 9. एक केस-असंवेदनशील सूची
- 10. केस असंवेदनशील #define
- 11. केस असंवेदनशील एलडीएपी खोज
- 12. एसओएलआर केस असंवेदनशील खोज
- 13. एक्सएमएल पथ - केस असंवेदनशील
- 14. डाटाबेस केस असंवेदनशील सूचकांक?
- 15. केस असंवेदनशील स्ट्रिंग ::
- 16. केस-असंवेदनशील GetMethod?
- 17. PHP: केस-असंवेदनशील पैरामीटर
- 18. केस-असंवेदनशील एनएसएसटींग तुलना
- 19. जेसन.NET केस-असंवेदनशील संपत्ति Deserialization
- 20. स्ट्रॉप्स केस असंवेदनशील कैसे बनाएं
- 21. MongoDB केस असंवेदनशील कुंजी खोज
- 22. केस असंवेदनशील है जहां स्ट्रिंगप्रॉपर्टी
- 23. केस असंवेदनशील स्कैला पार्सर-संयोजक
- 24. Grails में केस असंवेदनशील खोज
- 25. एंटिटी फ्रेमवर्क केस-असंवेदनशील बनाएं
- 26. cshell टैब पूर्णता, केस असंवेदनशील
- 27. रेगेक्स केस-असंवेदनशील कैसे बनाएं?
- 28. केस-असंवेदनशील साइफर क्वेरी चलाना
- 29. एसएचए -256 केस असंवेदनशील है?
- 30. कोको में केस-असंवेदनशील केवीसी?
यदि आप केवल एक ही प्रतिस्थापन कर रहे हैं, या कोड की लाइनों को सहेजना चाहते हैं, तो re.sub और (? I) ध्वज के साथ एक प्रतिस्थापन का उपयोग करना अधिक कुशल है: re.sub ('(? I) 'फिर सेभागो ('हिप्पो'), 'जिराफ', 'मैं अपने जन्मदिन के लिए एक एचआईपीपीओ चाहता हूं') –
+1 re.escape – daboross
के लिए +1 क्यों ** अक्षरों की स्ट्रिंग के लिए ** re.escape **? धन्यवाद। – Elena