python - मामला असंवेदनशील प्रतिस्थापन




string case-insensitive (6)

इसके लिए 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):] 

पायथन में केस-असंवेदनशील स्ट्रिंग प्रतिस्थापन करने का सबसे आसान तरीका क्या है?


एक ही पंक्ति में बहुत सरल:

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'

बीएफएलओच के जवाब पर जारी रखते हुए, यह फ़ंक्शन एक में बदलाव नहीं करेगा, लेकिन पुराने रूप से सभी घटनाएं - एक मामले में असंवेदनशील फैशन में।

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

ब्लेयर कॉनराड की तरह स्ट्रिंग.रप्लेस इसका समर्थन नहीं करता है।

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'

string प्रकार इसका समर्थन नहीं करता है। आप re.IGNORECASE विकल्प के साथ नियमित अभिव्यक्ति उप विधि का उपयोग कर शायद सबसे अच्छे हैं।

>>> 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'




case-insensitive