python中不区分大小写的字符串替换

时间:2012-06-26 10:57:20

标签: python regex

我能够在不区分大小写的方法中使用以下解决方案替换字符串内容中的单词

http://code.activestate.com/recipes/552726/ 
import re

class str_cir(str):
        ''' A string with a built-in case-insensitive replacement method '''

        def ireplace(self,old,new,count=0):
        ''' Behaves like S.replace(), but does so in a case-insensitive
        fashion. '''
            pattern = re.compile(re.escape(old),re.I)
            return re.sub(pattern,new,self,count)

我的问题是我需要更换我提供的单词

para = "Train toy tram dog cat cow plane TOY  Joy   JoyTOY"

我需要用“火腿”替换“玩具”这个词然后才能获得

'Train HAM tram dog cat cow plane HAM  Joy   JoyHAM'

我需要的是

'Train HAM tram dog cat cow plane HAM  Joy   JoyTOY'

3 个答案:

答案 0 :(得分:4)

\b添加到关键字的开头和结尾:

pattern = re.compile("\\b" + re.escape(old) + "\\b",re.I)

\b表示单词边界,它匹配单词开头和结尾的空字符串(由字母数字或下划线字符序列定义)。 (Reference

正如@Tim Pietzcker指出的那样,如果关键字中存在非字(非字母数字而非下划线)字符,它将无法正常工作。

答案 1 :(得分:2)

\b放在正则表达式的开头和结尾处。

答案 2 :(得分:2)

在正则表达式中使用单词边界(\b)包装您正在使用的单词。