Python基础教程(第三版)20.5.1 处理程序

论坛 期权论坛 期权     
派生之家   2019-7-28 23:17   4318   0
20.5.1 处理程序

先来看处理程序。处理程序负责生成带标记的文本,并从解析器那里接受详细指令。假设对于每种文本块,它都提供两个处理方法:一个用于添加起始标签,另一个用于添加结束标签。例如,它可能包含用于处理段落的方法start_paragraph和end_paragraph。生成HTML代码时,可像下面这样实现这些方法:
class HTMLRenderer:def start_paragraph(self):print('')def end_paragraph(self):print('')

当然,对于其他类型的文本块,需要提供类似的处理方法。 ( HTMLRenderer类的完整代码见稍后的代码清单20-4。)这好像足够灵活了:要添加其他类型的标记,只需再创建相应的处理程序(或渲染程序),并在其中包含添加相应起始标签和结束标签的方法。
注意 这里之所以使用术语处理程序(而不是渲染程序等),旨在指出它负责处理解析器生成的方法调用(参见20.5.2节),而不必像HTMLRenderer那样使用标记语言来渲染文本。 XML解析方案SAX也使用了类似的处理程序机制,这将在第22章介绍。

如何处理正则表达式呢?你可能还记得,函数re.sub可通过第二个参数接受一个函数(替换函数)。这样将对匹配的对象调用这个函数,并将其返回值插入文本中。这与前面讨论的处理程序理念很匹配——你只需让处理程序实现替换函数即可。例如,可像下面这样处理要突出的内容:
def sub_emphasis(self, match):return '{}'.format(match.group(1))
如果你不知道方法group是做什么的,应复习一下第10章介绍的模块re。
除start、 end和sub方法外,还有一个名为feed的方法,用于向处理程序提供实际文本。在简单的HTML渲染程序中,只需像下面这样实现这个方法:
def feed(self, data):
print(data)
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:10
帖子:2
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP