Python recipe(6): String Substitution
代码何在?
![div css xhtml xml Example Source Code](https://images.cnblogs.com/cnblogs_com/suyuan/quote.gif)
''' Created on 2010-5-21 @author: lk ''' import re def muti_replace(adict, text): regex = re.compile('|'.join(map(re.escape, adict.keys()))) return regex.sub(lambda match: adict[match.group()], text) class Xlator(dict): def _make_regex(self): return re.compile('|'.join(map(re.escape, self.keys()))) def __call__(self, match): return self[match.group()] def xlat(self, text): return self._make_regex().sub(self, text) class WordXlator(Xlator): def _make_regex(self): return re.compile('|'.join([r'\b%s\b'%word for word in map(re.escape, self.keys())])) if __name__ == '__main__': text = "My name is Kang Liu, I come from Fudan University. BigFudan" adict = {"Kang Liu":"Tomsheep", "Fudan":"WuJiaoChang" } print text print muti_replace(adict, text) xlator = Xlator(adict) print xlator.xlat(text) wordXlator = WordXlator(adict) print wordXlator.xlat(text)
以上代码改写自Python Cookbook 3-15
概述:
利用正则表达式完成字符串替换,接受一个字符串与一个字典(字典储存了替换原则),返回替换后的字符串拷贝。给出两种方法,一种基于lambda,另一种基于可调用对象——可以这样做的原因是python中re模块的sub方法的第一个参数可以接受一个字符串(用来替换)或者一个可调用对象(可以是functor也可以是callable对象)
代码说明:
1.re.compile函数:返回一个Regex对象,这个对象就是一个正则表达式的抽象
2.re.escape函数:将传入的原字符串进行转义,将那些非字母数字的字符转为\xx之类。比如’\’就会被转义为’\\’
3.Match对象及其group函数:可以由Regex对象的match、search函数生成,Regex对象的sub函数其实在执行时也隐式生成该对象。一个Match对象其实就是相应正则表达式(Regex对象)的一个匹配,而其group函数则表示了细粒度的、该Match的各个“组”(简单的表述可看作正则表达式中的小括号),group函数默认参数为0,代表整个匹配。
4.Regex对象的sub函数,用来替换字符串。第二个参数是等待替换的原字符串,第一个函数可以是用来替换的字符串,也可以是一个callable对象,该对象被调用时传入一个Match对象,返回用来替换的字符串
更多python正则表达式模块的使用方法可参考: