Python recipe(6): String Substitution

代码何在?

div css xhtml xml Example Source Code Example Source Code [http://www.cnblogs.com/tomsheep/]
'''
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正则表达式模块的使用方法可参考:

Python正则表达式与 re 模块

posted on 2010-05-21 21:07  tomsheep  阅读(934)  评论(0编辑  收藏  举报

导航