免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2099 | 回复: 0
打印 上一主题 下一主题

[python基础教程(第2版)-即时标记-关于re.sub] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-13 23:01 |只看该作者 |倒序浏览
下面是python基础教程(第2版)即时标记项目中的一个片段:
#handlers.py
class Handler:
        def callback(self, prefix, name, *args):
                method = getattr(self, prefix+name, None)
                if callable(method):return method(*args)
        def start(self, name):
                self.callback('start_', name)
        def end(self, name):
                self.callback('end_', name)
        def sub(self, name):
                def substitution(match):
                        result = self.callback('sub_', name, match)
                        if result is None: match.group(0)
                        return result
                return substitution

class HTMLRenderer(Handler):
                def start_document(self):
                        print '<html><head><title>...</title></head><body>'
                def end_document(self):
                        print '</body></html>'
                def start_paragraph(self):
                        print '<p>'
                def end_paragraph(self):
                        print '</p>'
                def start_heading(self):
                        print '<h2>'
                def end_heading(self):
                        print '</h2>'
                def start_list(self):
                        print '<ul>'
                def end_list(self):
                        print '</ul>'
                def start_listitem(self):
                        print '<li>'
                def end_listitem(self):
                        print '</li>'
                def start_title(self):
                        print '<h1>'
                def end_title(self):
                        print '</h1>'
                def sub_emphasis(self, match):
                        return '<em>%s</em>'%match.group(1)
                def sub_url(self, match):
                        return '<a href = "%s">%s</a>'%(match.group(1), match.group(1))
                def sub_mail(self,match):
                        return '<a href = "mailto:%s">%s</a>'%(match.group(1),match.group(1))
                def feed(self, data):
                        print data

书中写到re.sub语句中可以使用sub这个函数,参照书上方法在命令行中运行如下
>>> from handlers import HTMLRenderer
>>> handler = HTMLRenderer()
>>> handler.sub('emphasis')
<function substitution at 0x01A60970>
>>> import re
>>> re.sub(r'\*(.+?)\*',handler.sub('emphasis'),'This *is* a test')
'This <em>is</em> a test'

问题一:
这里re.sub的repl不是一个字符串,而是一个函数,想请教re.sub是如何将match object传递给substitution函数的参数'match'的?可否给出一些之类的简单例子。
我print了一下,发现match是<_sre.SRE_Match object at 0x01A60CA0>
问题二:我看了下re.sub的源代码,
def sub(pattern, repl, string, count=0, flags=0):
    return _compile(pattern, flags).sub(repl, string, count)
还是不知道sub是怎么实现的,在哪能看到源代码么,虽然可能看不懂,可是很想知道怎么找到源代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP