不区分大小写replace

在Python中执行不区分大小写的stringreplace最简单的方法是什么?

stringtypes不支持这个。 您可能最好使用re.IGNORECASE选项使用正则expression式子方法 。

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

非常简单,只需一行:

 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' 

或者,使用可选的“flags”参数:

 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' 

继续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 

这不需要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):] 

像Blair Conrad说的那样,string.replace不支持这个。

使用正则expression式re.sub ,但记得首先逃避replacestring。 请注意,2.6中没有用于re.sub标志选项,因此您必须使用embedded修饰符'(?i)' (或RE对象,请参阅Blair Conrad的答案)。 此外,另一个缺陷是,如果给出一个string,sub将在replace文本中处理反斜杠转义。 为了避免这个可以传入一个lambda。

这是一个function:

 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' 

我没有被转换为转义序列 (向下滚动),所以我注意到re.sub将反斜杠转义字符转换为转义序列。

为了防止我写下以下内容:

replace大小写不敏感。

 import re def ireplace(findtxt, replacetxt, data): return replacetxt.join( re.compile(findtxt, flags=re.I).split(data) ) 

另外,如果你希望它用转义字符来replace,就像这里得到特殊含义的bashslash字符转换为转义序列的其他答案,只要解码你的查找和,或replacestring。 在Python 3中,可能需要做一些类似.decode(“unicode_escape”)#python3

 findtxt = findtxt.decode('string_escape') # python2 replacetxt = replacetxt.decode('string_escape') # python2 data = ireplace(findtxt, replacetxt, data) 

在Python 2.7.8testing

希望有所帮助。

从来没有发布过答案,而这个线程真的很老,但我想出了另一种解决方法,并认为我可以得到你的答复,我没有在Python编程经验丰富,所以如果有明显的缺点,请指出,因为它的良好的学习: )

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